gpt4 book ai didi

java - 什么是引用复制技术以及为什么字符串对象引用值不会更改?

转载 作者:行者123 更新时间:2023-12-02 07:45:39 26 4
gpt4 key购买 nike

*强文本*什么是引用复制技术?

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

我在下面测试了按值传递和按引用传递的示例代码。原始值是按值传递,对象引用是按引用传递。在示例示例中,我测试了类型字符串常量、字符串对象、字符串缓冲区、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”并自动减小大小。这里我传递了 String 对象引用。那么为什么它没有改变?*

最佳答案

我不知道谁告诉你“原始值是按值传递,对象引用是按引用传递”。这是错误的。

在 Java 中,一切都是按值传递的。

现在,对象不是直接操作的,而是通过引用操作的。多个引用可以指向同一个对象,但这些引用像任何其他参数一样被复制。

关于java - 什么是引用复制技术以及为什么字符串对象引用值不会更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897168/

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