以下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"
我不确定字符串的情况。它们在技术上是对象,但我的编译器似乎在将变量设置为彼此时将它们视为基本类型。
如果Java像传递基本类型一样传递String变量,那么答案就是"abc ab"。然而,如果Java像引用其他任何对象一样处理String变量,那么答案将是"abc abc"。
你认为哪个答案是正确的?
System.out.println(s1 + " " + s2); // prints "1 42"
不正确,它输出的是"42 1"
。 - whytheq