【发布时间】:2011-04-29 17:39:13
【问题描述】:
以下 Java 代码段来自 AP 计算机科学实践考试。
String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);
这段代码的输出是 BlueJ 上的“abc ab”。但是,可能的答案选择之一是“abc abc”。答案可能取决于 Java 是否将字符串引用设置为原始类型(按值)或对象(按引用)。
为了进一步说明这一点,让我们看一个基本类型的示例:
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"
我不确定字符串是哪种情况。它们在技术上是对象,但我的编译器在将变量设置为彼此时似乎将它们视为原始类型。
如果 Java 传递像原始类型这样的字符串变量,答案是“abc ab”。但是,如果 Java 将 String 变量视为对任何其他 Object 的引用,则答案将是“abc abc”
你认为哪个是正确答案?
【问题讨论】:
-
您查看过 String 的文档吗?它是说是类还是原语?
-
您可能想阅读javadoc,因为它会回答您的问题。
-
System.out.println(s1 + " " + s2); // prints "1 42"不是真的......它打印"42 1" -
@whytheq 我得到“42 1”作为我的输出。我读了这个,我就像WTF? s2 在重新分配 s1 之前已经复制了值 42.
标签: java string variables reference