java基础问题疑惑

susuyjh 2009-10-11 04:31:00
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值吗,我搞混了,望高手请教下
...全文
243 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
myj870517 2009-10-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zqv11 的回复:]
赋值是将该对象赋值给变量而不是将对象的地址赋值给变量,执行到第四行结果是:bar=blue,foo=blue;执行到
第五行的结果是:foo=green。
[/Quote]恩,就赋值,而不是地址
myj870517 2009-10-11
  • 打赏
  • 举报
回复
用白话说,string bar = foo;就赋值了一次,没把两个变量绑定起来
zqv11 2009-10-11
  • 打赏
  • 举报
回复
赋值是将该对象赋值给变量而不是将对象的地址赋值给变量,执行到第四行结果是:bar=blue,foo=blue;执行到
第五行的结果是:foo=green。
markjoker 2009-10-11
  • 打赏
  • 举报
回复
一楼的有点问题:
“你可以在第4句后面加
System.out.println(foo.equals(bar));
System.out.println(foo==bar);
第一个打印出true,第二个为false ”
应该两个都是true;
字符串;String s = "abc"; 和 String s = new String("abc");是不同的;
我想这个大家都也该很了解了,我也不在这里啰嗦了,只是发现一个问题,纠正一下。
qiqi0288 2009-10-11
  • 打赏
  • 举报
回复
 1. public class Test {
  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. }
fskjb01 2009-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 thc1987 的回复:]
这题跟下面的道理是一样的:
Java codepublicstaticvoid change(String s) {
s="222";
}publicstaticvoid main(String[] args) {
String s="111";
change(s);
System.out.println(s);// 输出什么? }
[/Quote]


这个是局部和全局变量的区别吧
fskjb01 2009-10-11
  • 打赏
  • 举报
回复
关键在于第四句话的理解
4. string bar = foo;

这就话使得bar也指向了blue,而不是指向foo。
猿敲月下码 2009-10-11
  • 打赏
  • 举报
回复
这题跟下面的道理是一样的:
public static void change(String s) {
s = "222";
}

public static void main(String[] args) {
String s = "111";
change(s);
System.out.println(s);// 输出什么?
}
swandragon 2009-10-11
  • 打赏
  • 举报
回复
bar不是已经引用了foo的内存地址

bar和foo的内存地址是不同的
他们都指向相同的内容blue

之后foo的内容变成了green

但bar的内容还是blue
liuyi1985_2008 2009-10-11
  • 打赏
  • 举报
回复
答案应该选D
liguominz 2009-10-11
  • 打赏
  • 举报
回复
string bar = foo;
这句话只是把 foo的值"blue"赋值上去
而不是地址啊,
你可以在第4句后面加
System.out.println(foo.equals(bar));
System.out.println(foo==bar);
第一个打印出true,第二个为false
表示值一样,而指向的内存地址不一样

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧