小编pet*_*ter的帖子

私有构造函数,以避免竞争条件

我正在阅读Java Concurrency in Practice4.3.5会议

  @ThreadSafe
  public class SafePoint{

       @GuardedBy("this") private int x,y;

       private SafePoint (int [] a) { this (a[0], a[1]); }

       public SafePoint(SafePoint p) { this (p.get()); }

       public SafePoint(int x, int y){
            this.x = x;
            this.y = y;
       }

       public synchronized int[] get(){
            return new int[] {x,y};
       }

       public synchronized void set(int x, int y){
            this.x = x;
            this.y = y;
       }

  }
Run Code Online (Sandbox Code Playgroud)

我不清楚它在哪里说

私有构造函数的存在是为了避免在复制构造函数实现为此时发生的竞争条件(px,py); 这是私有构造函数捕获习惯的一个例子(Bloch和Gafter,2005).

据我所知,它提供了一个getter,可以在一个数组中同时检索x和y,而不是每个都有一个单独的getter,因此调用者将看到一致的值,但为什么是私有构造函数?这里有什么诀窍

java multithreading race-condition

49
推荐指数
4
解决办法
3431
查看次数

Java Object Cast如何在场景后工作?

可能重复:
Java强制转换操作符如何工作?
Java强制实现

我总是想知道如何使用Java进行对象转换.我理解原始类型它会更像二进制表示级别,但是对象呢?有点像Polymorphism或者dynamic binding在某种程度上会在运行时确定一切吗?例如:

class Parent{
     void A(){}
}
class Child extends Parent{
     @Override
     void A(){}
}

Parent p = new Parent();
Child c = (Child) p;
Run Code Online (Sandbox Code Playgroud)

这是如何在幕后工作的?它是否创建了一个新实例Child?而且,如果你试图施放会发生什么:

Child b = (Child) new Object();
Run Code Online (Sandbox Code Playgroud)

最后一个,在将一个原语转换为包装类时:

Double d = (Double) 3.3;
Run Code Online (Sandbox Code Playgroud)

我知道你没有必要施展它,但如果你这样做呢?在后端发生了什么重大事件?

java polymorphism casting

40
推荐指数
4
解决办法
2万
查看次数

如果编译器自动将字符串连接转换为StringBuilder,为什么要显式使用StringBuilder?

可能重复:
String中的StringBuilder与字符串串联在toString()中

我想知道,因为编译器内部使用StringBuilder在执行字符串连接时附加2个字符串,那么问题是什么?如果字符串连接已经为你完成了工作,我为什么要使用StringBuilder呢?还有其他具体原因吗?

java stringbuilder

36
推荐指数
1
解决办法
2万
查看次数

Java为什么接口扩展接口

我想知道在什么情况下我们从接口扩展接口?因为,例如

interface A{
    public void method1();
}
interface B extends A{
    public void method2();
}
class C implements B{
    @Override public void method1(){}
    @Override public void method2(){}
}
Run Code Online (Sandbox Code Playgroud)

不等于

interface A{
    public void method1();
}
interface B{
    public void method2();     
}
class C implements A, B{
    @Override public void method1(){}
    @Override public void method2(){}
}
Run Code Online (Sandbox Code Playgroud)

背后有什么重大原因吗?

java inheritance extends interface

36
推荐指数
4
解决办法
3万
查看次数

Scala类和case类==比较

我不太明白为什么当我们将两个实例与一个类的相同属性进行比较而不重写equals它将给出的方法时false.但是,true当我们比较一个案例类的两个实例时,它会给出一个.例如

 class A(val name: String, val id: Int)
 case class B(name: String, id: Int)

 object Test {
    val a1 = new A('a',1)
    val a2 = new A('a',1)
    println(a1 == a2)   //this returns false

    var b1 = B('b',1)
    var b2 = B('b',1)
    println(b1 == b2)   //this returns true

 }
Run Code Online (Sandbox Code Playgroud)

有人可以解释原因吗?

scala equality

36
推荐指数
1
解决办法
2万
查看次数

比特计算算法(Brian Kernighan)的整数时间复杂度

有人可以解释为什么Brian Kernighan的算法需要O(log N)来计算整数中的设置位(1).这个算法的简单实现如下(在JAVA中)

int count_set_bits(int n){
    int count = 0;
    while(n != 0){
        n &= (n-1);
        count++;
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

我通过逐个清除最右边的设置位直到它变为0来理解它是如何工作的,但我只是不知道我们如何获得O(log N).

algorithm bit-manipulation

32
推荐指数
3
解决办法
2万
查看次数

Java Serialization vs JSON vs XML

我想知道在处理通过网络传输对象时我们应该选择什么序列化机制.优缺点都有什么 ?

我知道大多数的我们在使用的时候JSON还是XML用于AJAX自传输格式相当多Javascript格式,再加上JSON是相当轻巧的,其占用空间小,因此是Java系列化完全出表的?

java serialization json xml-serialization data-serialization

26
推荐指数
3
解决办法
2万
查看次数

如何在Java中使用double转换为int

我是Java的新手,想知道如何对int转换工作?我理解通过采用低32位来实现long很简单,但是对于int(32位)来说,加倍(64位)呢?来自二进制二进制的64位是双精度浮点格式(尾数),那么它如何在内部转换为int?

java primitive casting mantissa

25
推荐指数
2
解决办法
2万
查看次数

Javascript重新定义并覆盖现有的函数体

我想知道一旦它构建完成后我们还能改变它吗?

     var O = function(someValue){
           this.hello = function(){
                return "hello, " + someValue;
           }
     }

     O.prototype.hello = function(){
           return "hhhhhhh";
     }

     var i = new O("chris");
     i.hello();   // -> this still returns the old definition "hello, chris"
Run Code Online (Sandbox Code Playgroud)

javascript语句O.prototype.hello = function(){....}不会覆盖并重新定义hello函数行为.这是为什么 ?我知道如果你试图重用参数会有类型错误someValue.

      // this will fail since it can't find the parameter 'someValue'
      O.prototype.hello = function(){
             return "aloha, " + someValue;
      } 
Run Code Online (Sandbox Code Playgroud)

我想知道为什么它允许在运行时添加功能

      O.prototype.newFunction = function(){
           return "this is a new function";
      }

      i.newFunction();   //  print 'this …
Run Code Online (Sandbox Code Playgroud)

javascript prototype

23
推荐指数
1
解决办法
4万
查看次数

jsp是如何工作的?

我想知道JSP有没有被编译?为什么我问的原因是因为每当我部署在Web服务器上我的Java EE应用程序,我只看到在WEB-INF文件夹的servlet和豆类类文件,因为它们被编译,但不是说JSP,所以它是如何工作什么是正常请求/响应周期的逻辑流程和大图.

java jsp

21
推荐指数
3
解决办法
3万
查看次数