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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuchuang1992 中级黑马   /  2013-11-1 22:02  /  562 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test{
    public static void main(String[] args)
{
                String s1 = new String("abc");
                String s2 = new String("abc");
                System.out.println("s1 == s2 ? "+s1 == s2);
}
}

在String和Boolean类型中,打印的false,"s1 == s2 ? " 在哪?why?

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

4 个回复

倒序浏览
s1和s2指向的地址不一样,所以是false,如果想判断他们的内容是否相同,可以用equals比较
回复 使用道具 举报
  1. class Test{
  2.     public static void main(String[] args)
  3. {
  4.                 String s1 = new String("abc");
  5.                 String s2 = new String("abc");
  6.                 System.out.println("s1 == s2 ? "+s1 == s2);
  7. }
  8. }

  9. 在String和Boolean类型中,打印的false,"s1 == s2 ? " 在哪?why?
复制代码
      在JAVA中, String 不属于基本数据类型,而是引用数据类型,事实上,
String s1 s2 的值,不是一个字符串,而是字符串在内存中的地址,  String 变量
s1 s2只是引用了一个地址  而new 的意思是在内存中分别分配一个新的存储地址给
s1 s2 ,   s1 s2 所存内存地址中所指向的内存中都各自存了"abc".但这里==比的不是
那里面的值,而是  ,s1 s2的所存储的内存地址值,所以 如果要比,s1 s2各自存的内存
地址指向的内存空间的内容,可以用 equals 进行比较


评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
魏-玉-彪 发表于 2013-11-1 23:47
在JAVA中, String 不属于基本数据类型,而是引用数据类型,事实上,
String s1 s2 的值,不是一个字符串, ...

我知道为什么是false,我想问一下为什么"s1==s2 ?" 没打印出来 ?
回复 使用道具 举报
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println("s1 == s2 ? "+(s1 == s2));

你这个问题是运算符优先级的问题:

照你的写法,程序执行顺序为   先 "s1 == s2 ? "+ s1  得到  "s1 == s2 ?abc"  
然后再  "s1 == s2 ?abc"  == s2  即  "s1 == s2 ?abc"  == "abc"   当然的 返回结果为 false

你想要的应该是下面这种 加上括号  
System.out.println("s1 == s2 ? "+(s1 == s2));

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马