public static void main(String[] args) {
ArrayList a=null, b=null;
a=b;
a=new ArrayList();
System.out.println(a+""+b);
}
为什么 b 被打印为 null ?
我认为java使引用相同,那么无论你在其中一个引用中进行什么更改都会反射(reflect)另一个引用。但在这种情况下不行!!!
最佳答案
这一行:
a = b;
将a
的值设置为b
的当前值。这就是它所做的全部。 b
的当前值为 null,因此相当于:
a = null;
它不关联这两个变量。它只是将一个的值复制到另一个。
之后更改a
的值不会改变b
。这两个变量是完全独立的。请注意,这对于原始类型完全相同:
int a = 10;
int b = a;
a = 5;
System.out.println(b); // Prints 10, not 5
即使你有:
ArrayList<String> a = new ArrayList<String>();
ArragList<String> b = a;
a.add("Hello");
System.out.println(b.get(0)); // Prints "Hello"
这仍然没有真正显示变量a
和b
之间的关系。它们具有相同的值,因此它们引用相同的对象(ArrayList 本身) - 可以通过任一变量观察对该对象的更改。但是更改每个变量的值以引用不同的列表(或 null)不会影响其他变量或对象本身。
可能让您感到困惑的一件事是 a
或 b
的实际值是什么。 Java 中变量(或任何其他表达式)的值从来都不是对象 - 它始终是引用或原始值。
因此,赋值运算符,或将参数传递给方法,或类似的东西永远不会复制对象 - 它只会复制表达式的值(引用或原始值)。
一旦你理解了这一点,Java 就开始变得更有意义了......
关于java - 当你创建一个引用=另一个引用并且两个值都为空时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940320/