转载

Java String变量设置 – 引用还是值?

以下Java代码段来自AP计算机科学实践考试.

String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);

此代码的输出在BlueJ上为“abc ab”.然而,其中一个可能的答案是“abc abc”.答案可以取决于Java是否将String引用设置为基元类型(按值)或类似对象(通过引用).

为了进一步说明这一点,我们来看一下原始类型的例子:

int s1 = 1;
int s2 = s1; // copies value, not reference
s1 = 42;

System.out.println(s1 + " " + s2); // prints "1 42"

但是,说我们有BankAccount对象持有余额.

BankAccount b1 = new BankAccount(500); // 500 is initial balance parameter
BankAccount b2 = b1; // reference to the same object
b1.setBalance(0);
System.out.println(b1.getBalance() + " " + s2.getBalance()); // prints "0 0"

我不知道Strings的情况如何.它们在技术上是对象,但是当将变量设置为彼此时,我的编译器似乎将它们视为基本类型.

如果Java传递像原始类型的String变量,答案是“abc ab”.但是,如果Java将String变量视为对任何其他Object的引用,则答案将为“abc abc”

你认为哪个是正确答案?

java字符串是不可变的,所以你的重新分配实际上导致你的变量指向一个新的String实例,而不是改变String的值.

String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);

在第2行,s1 == s2 AND s1.equals(s2).在第3行连接后,s1现在引用不可变值“abc”的不同实例,所以s1 == s2和s1.equals(s2)也不同.

http://stackoverflow.com/questions/5835386/java-string-variable-setting-reference-or-value

原文  https://codeday.me/bug/20181015/297246.html
正文到此结束
Loading...