黑马程序员技术交流社区

标题: 这个是为什么,求大神解答 [打印本页]

作者: 曹冬明    时间: 2014-4-15 02:00
标题: 这个是为什么,求大神解答
本帖最后由 曹冬明 于 2014-4-15 08:26 编辑
  1. class StringDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String x = "hello";
  6.                 String y = "world";
  7.                 String z = "helloworld";

  8.                 System.out.println(z==x+y);
  9.                 System.out.println(z==(x+y));
  10.                 System.out.println((x+y).equals(z));
  11.         }
  12. }
复制代码
为什么结果是false
false
true






作者: 榨菜    时间: 2014-4-15 02:21
== 比较的是对象的地址
作者: 陈妙俊    时间: 2014-4-15 08:08
class StringDemo
{
        public static void main(String[] args)
        {
                String x = "hello";
                String y = "world";
                String z = "helloworld";

                System.out.println(z==x+y);
                System.out.println(z==(x+y));               //因为是不同的对象,所以为false
                System.out.println((x+y).equals(z));        //在字符串中重写了equals方,所以不再比较堆内存地址,而比较它们的内容是否相同, 因为S+y和Z的哦你容相同,所以为ture
        }
}
作者: sheng6699    时间: 2014-4-15 08:15
这写 字符串是"对象"所以比较的地址,地址不同所以false.而第三个通过equals比较的是对象里的内容。所以true
作者: faith    时间: 2014-4-15 10:16
这里用的是== 地址引用的比较 而 equals是存储地址内容的比较(存取内存中内容的比较) 建议看看老师的笔记
作者: wyqs92    时间: 2014-4-15 23:33
==表示你比较的对象的地址,而equals比较的是值。。




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