A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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
难道 这条语句还有别的功能?

5 个回复

倒序浏览
//System.out.println(s1=s2);
把s2的内存地址赋值给s1,它们现在是指向同一个内存地址,所以比较后都是true
回复 使用道具 举报
任睦强 发表于 2012-6-7 10:06
//System.out.println(s1=s2);
把s2的内存地址赋值给s1,它们现在是指向同一个内存地址,所以比较后都是true ...

哦 这样啊,把内内存地址给他
回复 使用道具 举报
我能驾驭住 发表于 2012-6-7 10:29
哦 这样啊,把内内存地址给他

是的  同学
回复 使用道具 举报
//System.out.println(s1=s2);
打开这个就等于把s2引用传递给了s1,他俩就都是同一个对象了,很自然就是全true;
equals比较的是对象的内容
==比较的是对象的地址;
回复 使用道具 举报
这个问题的解决首先你要明白赋值语句与等于的区别。如果你把System.out.println(s1=s2);加进了,相当于你把s2的值赋给了s1.所以第一个输出语句就打印s2值abc,可以这样理解把s2的右边赋给s1左边及:String s1=new String("abc");所以下面就打印true。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马