我来自C ++,带有指针和引用(const string& str
/ string* str
)。
我了解到您通过新语句在Java中创建了一个对象。
Bucket b1 = new Bucket();
所以现在我有一个名为b1
的引用,"指向" 到Bucket
类型的对象,对吗?
在我的Android应用程序中,我处理了很多列表。这些列表里面可能有1000个对象。
for( int i = 0; i < 1000; i++ )
myList.add( new Bucket() );
我的列表现在包含1000个Bucket
个对象。或者它包含1000个对Bucket
个对象的引用?
但是如果我在列表中添加另一个项目:
b1 = new Bucket();
myList.add( b1 );
执行b1
和myList
引用/包含相同的对象(当然,myList
的最后一个索引)?
如果我有另一份清单:
List<Bucket> anotherList = myList;
两个列表引用或包含相同的对象?或者anotherList
将引用到myList
?
答案 0 :(得分:3)
Java 始终按值传递。但是,任何Object实例的值都是引用地址。
在您的问题中anotherList
不是另一个List
。它是对myList
,
List<Bucket> anotherList = new ArrayList<>(myList);
这是List
的另一个例子。
答案 1 :(得分:2)
Java使用地址引用。
例如,在您的情况下,如果更改myList,则将anotherList更改为。
要拥有两个具有相同信息的不同列表,您需要执行以下操作:
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
Collections.copy(b, a);
在这种情况下,您可以更改列表a而不更改列表b。
答案 2 :(得分:1)
所以现在我有一个名为b1的引用,其中&#34;指向&#34;对于Bucket类型的对象,对吧? 从右强>
我的列表现在包含1000个Bucket对象。或者它包含1000个Bucket对象的引用? 1000个参考
执行b1和myList引用/包含相同的对象 是相同的
这两个列表是否引用或包含相同的对象?或者anotherList是否引用myList? 只有一个列表 - anotherList和myList都引用它
答案 3 :(得分:1)
由于您没有为anotherList
创建任何对象。它将引用myList
。
例如:
List<> x = new ArrayList<>();
List<> y =x;
此处y
将引用x
。