Rob*_*bin 0 java string reference
我理解类是引用类型,例如我创建了以下类:
class Class {
String s = "Hello";
public void change() {
s = "Bye";
} }
Run Code Online (Sandbox Code Playgroud)
使用以下代码,我理解这Class是一个引用类型:
Class c1 = new Class();
Class c2 = c1; //now has the same reference as c1
System.out.println(c1.s); //prints Hello
System.out.println(c2.s); //prints Hello
c2.change(); //changes s to Bye
System.out.println(c1.s); //prints Bye
System.out.println(c2.s); //prints Bye
Run Code Online (Sandbox Code Playgroud)
现在我想用String做同样的事情,但这不起作用.我在这做错了什么?:
String s1 = "Hello";
String s2 = s1; //now has the same reference as s1 right?
System.out.println(s1); //prints Hello
System.out.println(s2); //prints Hello
s2 = "Bye"; //now changes s2 (so s1 as well because of the same reference?) to Bye
System.out.println(s1); //prints Hello (why isn't it changed to Bye?)
System.out.println(s2); //prints Bye
Run Code Online (Sandbox Code Playgroud)
这是因为您正在更新 s2 而不是 s1 的引用。让我们看看你的代码是如何执行的:
String s1 = "Hello";
String s2 = s1;
Run Code Online (Sandbox Code Playgroud)
Hello在 中创建的文字字符串,String pool然后将其引用放入 中s1。然后在第二行s2也得到了相同的引用。
到目前为止,s1和s2都指向 中的相同文字字符串String pool。
现在当下面的代码被执行时。
另一个文字Bye被创建在 中String pool,引用被放入 中s2。然而,s1仍然有旧的参考,因此正在打印Hello。
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |