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

© 燃烧端午   /  2012-6-20 23:44  /  4707 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 feigecal 于 2012-6-24 09:09 编辑

程序在运行的时候会创建一个字符串缓冲池,当使用 String sr="abc";这样的表达时创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在上面,String st="abc";中st先被放到了池中,所以在sr被创建的时候,程序找到了具有相同值的 st,将 sr 引用 st 所引用的对象"abc"。下面,使用了 new 操作符,他明白的告诉程序:"我要重新创建一个对象"。于是一个新的"abc"Sting对象被创建在内存中。他们的值相同,但是位置不同,只是浪费了资源。==比较的是2个对象的地址,而equals比较的是2个对象的内容,不管是上面还是下面,对象 的内容都是abc所以你的equals()运算都是true。


我也是刚搞清楚,希望帮到你,共同进步,呵呵
回复 使用道具 举报
用new关键字后,实例化了对象,那么str1和str2就是两个引用,这两个引用指向的是两块内存,所以用“==”比较就不相同了。
回复 使用道具 举报
String st1 = new String("abc");  //这个在堆内存中新建了一个空间,值为“abc”,地址保存在st1中
String sr1 = new String("abc");   //这个在堆内存中又新建了一个空间,值为“abc”,地址保存在sr1中
System.out.println(st1 == sr1);//为什么会是返回false  ::st1 和 sr1存放的地址不同,肯定不相等了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马