黑马程序员技术交流社区

标题: System.out.println(s1=s2);还有这功能哩? [打印本页]

作者: 我能驾驭住    时间: 2012-6-7 10:03
标题: System.out.println(s1=s2);还有这功能哩?
package cn.Lianxi;
public class Demo2 {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s1="abc";//一个对象
  String s2=new String("abc");//两个对象
  //System.out.println(s1=s2);
  System.out.println(s1==s2);
  System.out.println(s1.equals(s2));
  System.out.println(s1.getClass()==s2.getClass());
}
}
这样的输出结果是:
false
true
true
如果System.out.println(s1=s2);这条语句注释打开,结果全是true
难道 这条语句还有别的功能?


作者: 任睦强    时间: 2012-6-7 10:06
//System.out.println(s1=s2);
把s2的内存地址赋值给s1,它们现在是指向同一个内存地址,所以比较后都是true
作者: 我能驾驭住    时间: 2012-6-7 10:29
任睦强 发表于 2012-6-7 10:06
//System.out.println(s1=s2);
把s2的内存地址赋值给s1,它们现在是指向同一个内存地址,所以比较后都是true ...

哦 这样啊,把内内存地址给他
作者: 任睦强    时间: 2012-6-7 10:29
我能驾驭住 发表于 2012-6-7 10:29
哦 这样啊,把内内存地址给他

是的  同学
作者: 胡团乐    时间: 2012-6-7 13:15
//System.out.println(s1=s2);
打开这个就等于把s2引用传递给了s1,他俩就都是同一个对象了,很自然就是全true;
equals比较的是对象的内容
==比较的是对象的地址;
作者: 吴小铁你好    时间: 2012-6-7 13:30
这个问题的解决首先你要明白赋值语句与等于的区别。如果你把System.out.println(s1=s2);加进了,相当于你把s2的值赋给了s1.所以第一个输出语句就打印s2值abc,可以这样理解把s2的右边赋给s1左边及:String s1=new String("abc");所以下面就打印true。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2