gpt4 book ai didi

java - 当你创建一个引用=另一个引用并且两个值都为空时?

转载 作者:行者123 更新时间:2023-12-01 07:13:49 25 4
gpt4 key购买 nike

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"

仍然没有真正显示变量ab之间的关系。它们具有相同的值,因此它们引用相同的对象(ArrayList 本身) - 可以通过任一变量观察对该对象的更改。但是更改每个变量的以引用不同的列表(或 null)不会影响其他变量或对象本身。

可能让您感到困惑的一件事是 ab 的实际值是什么。 Java 中变量(或任何其他表达式)的值从来都不是对象 - 它始终是引用或原始值。

因此,赋值运算符,或将参数传递给方法,或类似的东西永远不会复制对象 - 它只会复制表达式的值(引用或原始值)。

一旦你理解了这一点,Java 就开始变得更有意义了......

关于java - 当你创建一个引用=另一个引用并且两个值都为空时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com