黑马程序员技术交流社区

标题: 后来,我发现我真的很菜! [打印本页]

作者: wuchuang1992    时间: 2013-11-1 22:02
标题: 后来,我发现我真的很菜!
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?
作者: 七道    时间: 2013-11-1 22:16
s1和s2指向的地址不一样,所以是false,如果想判断他们的内容是否相同,可以用equals比较
作者: 魏-玉-彪    时间: 2013-11-1 23:47
  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 进行比较



作者: wuchuang1992    时间: 2013-11-2 07:15
魏-玉-彪 发表于 2013-11-1 23:47
在JAVA中, String 不属于基本数据类型,而是引用数据类型,事实上,
String s1 s2 的值,不是一个字符串, ...

我知道为什么是false,我想问一下为什么"s1==s2 ?" 没打印出来 ?
作者: 深情小建    时间: 2013-11-2 10:05
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));






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