Java代码片段 - 使用变量final - 需要解释

AM0*_*M01 2 java variables final

final Integer a = 1;
Integer b = a;

System.out.println("a: " + a); // prints 1
System.out.println("b: " + b); // prints 1

b++;
System.out.println("a: " + a); // prints 1
System.out.println("b: " + b); // prints 2

b = b + 1;
System.out.println("a: " + a); // prints 1
System.out.println("b: " + b); // prints 3

b = 10;
System.out.println("a: " + a); // prints 1
System.out.println("b: " + b); // prints 10
Run Code Online (Sandbox Code Playgroud)

如果有人可以解释代码输出,特别是与变量B有关,那将是很好的.

Kyl*_*lar 7

好的,让我们从这开始:

final Integer a = 1;
Run Code Online (Sandbox Code Playgroud)

您已经创建了对Integer对象的最终引用,该对象是从原始int自动装箱的.

引用可以只分配一次,而不会再分配.

Integer b = a;
Run Code Online (Sandbox Code Playgroud)

在这里,您已创建了对同一对象的第二个引用,但此引用不是最终的,因此您可以在闲暇时重新分配它.

b++;
Run Code Online (Sandbox Code Playgroud)

这是以下声明的简写:

b = new Integer(b.intValue() + 1);
Run Code Online (Sandbox Code Playgroud)

巧合的是,同样的

b = b + 1;
Run Code Online (Sandbox Code Playgroud)

最后一句话:

b = 10
Run Code Online (Sandbox Code Playgroud)

使用自动装箱来缩写此声明:

b = new Integer(10);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我相信autoboxing使用`Integer.valueOf`,而不是`new Integer`. (5认同)