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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Spring up 中级黑马   /  2012-12-17 12:37  /  1331 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {
        public static void main(String[] args) {

                String Value1="ABCDEFG";
               
                String value2 = new String ("ABCDEFG");

                System.out.println(Value1== value2);//请问:这里的结果为什么是false。
                                                    //有点模糊!

        }
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
==号比较的是地址...
equals()比较的才是值...

String Value1="ABCDEFG";先在内存中找是不是有"ABCDEFG" 这个对象,如果有就指向他....如果内存里没有"ABCDEFG",就创建一个新的对象保存"ABCDEFG"
String str=new String ("ABCDEFG") 就是不管内存里是不是已经有"ABCDEFG"这个对象,都新建一个对象保存"ABCDEFG"

所以...他们指向的不是同一个对象...自然是false了....
回复 使用道具 举报
黑马黄涛 发表于 2012-12-17 12:44
==号比较的是地址...
equals()比较的才是值...

噢啦!谢谢!
回复 使用道具 举报
Spring up 发表于 2012-12-17 12:48
噢啦!谢谢!

呵呵...小事..:D
回复 使用道具 举报
哦 哦  你这个问题,我以前也想过,== 和equals()  这两个不同。一个是比较内容,一个是比较地址的引用。
== 比较对象的引用是否相同,引用就是对象地址 ,equals是对象的方法,基本上实现来比较对象自己的内容,
字符串对象就是字符串值,你自己的对象就是你自己定义的。。

回复 使用道具 举报
String的比较要用equals()  去对比   ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
回复 使用道具 举报
王玮 中级黑马 2012-12-18 09:41:34
7#
第一: == 比较的是地址,equals() 比较的是 字符串的内容.
第二:   String Value1="ABCDEFG";  先在 字符串池里找,没有就放进去,有就返回地址;
            String value2 = new String ("ABCDEFG"); 不管有木有 都在堆内存中创建 一个对象存放 value2 ,并把地址返回。

回复 使用道具 举报
董将 中级黑马 2012-12-18 18:33:42
8#
王玮 发表于 2012-12-18 09:41
第一: == 比较的是地址,equals() 比较的是 字符串的内容.
第二:   String Value1="ABCDEFG";  先在 字符 ...

能详细说下关于那个池的问题吗,都有什么字符在字符串池里面
回复 使用道具 举报
王斌 中级黑马 2012-12-19 10:22:12
9#
应该先从内存的存储方式分析,首先 String Value1="ABCDEFG";   分配了一个内存空间用来存储"ABCDEFG"   ,
String value2 = new String ("ABCDEFG");
这个在内存中分配了两个空间,一个用来存放value2 ,值为null  ,
第二个就是"ABCDEFG" 给这个字符串也分配了空间,并且让第一个value2 指向这个字符串
equals  比较两个属性的值是否相等,而==是比较在内存中的地址是否相等,
所以这个结果是false了
回复 使用道具 举报
1、==比较的是hashcode,一般来说这个两个值虽然是一样的,但是他们的hashcode是不等的。这也就是为什么String需要用equals()来比较的缘由,
2、equals()很多时候是需要重写的它和hashcode,tostring一般都是要重写的,这样比较好!
希望解释对你有帮助!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马