12、分析下面的代码,其输出结果是( )。
1. public class Test {
2. public static void main (String [] args) {
3. string foo = "blue";
4. string bar = foo;
5. foo = "green";
6. System.out.printIn(bar);
7. }
8. }
A. 一个异常抛出
B. 代码无法编译
C. null
D. blue
E. green
知识点列表:4.1 系统定义的类(包)。
正确答案是选择D,我是选择E,我是认为在第四行,bar不是已经引用了foo的内存地址,然后又把”green“赋予给foo,不就相当与给foo里"blue"重新赋予green值吗,我搞混了,望高手请教下
1. public class Test {
2. public static void main (String [] args) {
3. string foo = "blue";
4. string bar = foo;
5. foo = "green";
6. System.out.printIn(bar);
7. }
8. }
A. 一个异常抛出
B. 代码无法编译
C. null
D. blue
E. green
知识点列表:4.1 系统定义的类(包)。
正确答案是选择D,我是选择E,我是认为在第四行,bar不是已经引用了foo的内存地址,然后又把”green“赋予给foo,不就相当与给foo里"blue"重新赋予green值吗,我搞混了,望高手请教下
这句话只是把 foo的值"blue"赋值上去
而不是地址啊,
你可以在第4句后面加
System.out.println(foo.equals(bar));
System.out.println(foo==bar);
第一个打印出true,第二个为false
表示值一样,而指向的内存地址不一样
他们都指向相同的内容blue之后foo的内容变成了green但bar的内容还是blue
public static void change(String s) {
s = "222";
} public static void main(String[] args) {
String s = "111";
change(s);
System.out.println(s);// 输出什么?
}
4. string bar = foo;这就话使得bar也指向了blue,而不是指向foo。
2. public static void main (String [] args) {
3. string foo = "blue"; //foo指向blue
4. string bar = foo; //bar指向blue
5. foo = "green"; //foo转而指向green,并不是green盖掉了blue,而是指针改变了指向
6. System.out.printIn(bar); //打印bar指向的内容,仍然是blue
7. }
8. }
“你可以在第4句后面加
System.out.println(foo.equals(bar));
System.out.println(foo==bar);
第一个打印出true,第二个为false ”
应该两个都是true;
字符串;String s = "abc"; 和 String s = new String("abc");是不同的;
我想这个大家都也该很了解了,我也不在这里啰嗦了,只是发现一个问题,纠正一下。
第五行的结果是:foo=green。