* 强文 *什么是参考复制技术?
The reference copying technique is much more difficult to use for mutable objects, because if any user of a reference to a mutable object changes it, all other users of that reference will see the change
另一件事我在下面测试了示例代码,用于传值和& pass-by-reference。原始值是值传递,对象引用是pass-by-reference。在示例中,我测试了一个字符串,String对象,String缓冲区,int,ArrayList。
String s="foo";
String sample1=new String("dog");
StringBuffer sb=new StringBuffer();
sb.append("abc");
ArrayList l=new ArrayList();
l.add("ssss");
l.add("bbbb");
l.add("ssbbbss");
l.add("bbbb");
l.add("bbbb");
int k=14,listsize=0;
listsize=l.size();
TesingPrimitivRefernce.generateString(s);
TesingPrimitivRefernce.generateString(sample1);
TesingPrimitivRefernce.generateStringBuilder(sb);
TesingPrimitivRefernce.generateInt(k);
TesingPrimitivRefernce.generateNewList(l);
System.out.println("String============"+s+" String Buffer========"+sb+" String object "+sample1);
System.out.println("int Primitive Values==="+k);
System.out.println("Orignal List Size"+listsize+" After called method List Size=========="+l.size());
public static void generateString(String s){
s=s.concat("d");
}
public static void generateStringBuilder(StringBuffer s){
s=s.append("d");
}
public static void generateInt(int s){
s=10;
}
public static void generateNewList(ArrayList list){
list.remove("bbbb");
}
我怀疑是在调用 * TesingPrimitivRefernce.generateString(sample1)之后没有更改String对象(**即变量sample1 )。 但是在arraylist我删除了值“bbb”并自动删除size.Here我传递了String对象引用。那为什么它没有改变? *
答案 0 :(得分:1)
我不知道是谁告诉你“原始值是按值传递,对象引用是按引用传递”。这是错误的。
在Java中,一切都是按值传递的。
现在,对象不是直接操作,而是通过引用操作。多个引用可以指向同一个对象,但这些引用会像任何其他参数一样被复制。
答案 1 :(得分:1)
Java中的引用按值传递。因此,如果您将TesingPrimitivRefernce.generateString
中的第一个参数重新分配给其他内容,则sample1
引用的副本会被更改(您没有尝试使用->
参数修改参数一些...修饰符,是吗?:))。
所以,在修改之前:
->
狗->
狗修改后:
->
狗在ArrayList的情况下,您正在修改基础列表,因此修改了最初引用的对象。
答案 2 :(得分:0)
字符串是不变的;它们的值在创建后无法更改。将字符串传递给方法时,会创建此字符串的副本。此方法的所有进一步更改都会修改此副本,而不是字符串本身。