gpt4 book ai didi

java - Java 中的原始包装类是否被视为引用类型?

转载 作者:行者123 更新时间:2023-12-02 05:11:43 26 4
gpt4 key购买 nike

来自Java in a Nutshell, 2.10 Reference Types ,

Java does not manipulate objects and arrays directly. Instead, it manipulates references to objects and arrays. Because Java handles objects and arrays by reference, classes and array types are known as reference types. In contrast, Java handles values of the primitive types directly, or by value.

但是从下面来看,原始包装类(对象)实际上是通过值而不是引用来处理的,

> Integer foo = new Integer(1);
> Integer bar = foo;
> bar = new Integer(2);
> foo
1

那么上面的引述是不是不太正确?

<小时/>

更新:我的困惑来自于误解上面的代码片段与以下内容之间的区别:

> import java.util.LinkedList;
> LinkedList<Integer> foo = new LinkedList<Integer>();
> foo.add(1);
> LinkedList<Integer> bar = foo;
> bar.remove();
> System.out.println(foo.size());
0
> System.out.println(bar.size());
0

在后一种情况下,bar.remove() 实际上对 foobar 引用的 LinkedList 进行操作。

最佳答案

原始类包装器是对象引用,而不是原始类型。

在您的示例中,您正在为变量分配新值,而不是更新状态。这就是为什么 foo 保留其值(旧是因为它从未改变):

Integer foo = new Integer(1);
Integer bar = foo; //bar and foo "points" to the same location
bar = new Integer(2); //now bar only "points" to a new location, foo is unaffected
System.out.println(foo);

您可以通过使用 ==equals 比较轻松测试这一点:

Integer a = 128;
Integer b = 128;
System.out.println(a == b); //false
System.out.println(a.equals(b)); //true

关于java - Java 中的原始包装类是否被视为引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283104/

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