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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张青峰 黑马帝   /  2012-2-2 20:56  /  2841 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张青峰 于 2012-2-8 18:08 编辑

有这样一段程序:
String str1=new String("hello");
String str2=new String("hello");

我是初学者,请问高手们:为什么str1和str2在堆中的位置是一样的,不是说new一个对象就会在堆中新产生一个内存区域?谢谢

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1 OK,已经加上,欢迎踊跃参加论坛交流.

查看全部评分

8 个回复

倒序浏览

  1. class testing2
  2. {
  3.         public static void main(String []args){
  4.                 String s1 = new String("123");
  5.                 String s2 = new String("123");

  6.                 System.out.println(s1 == s2);
  7.         }
  8. }
复制代码
输出是false
两对象是不相等的,但是“123”是相等的
看图
回复 使用道具 举报

  1. class testing2
  2. {
  3.         public static void main(String []args){
  4.                 String s1 = new String("123");
  5.                 String s2 = new String("123");
  6.                 String s3 = "123";
  7.                 String s4 = "123";

  8.                 System.out.println(s1 == s2);
  9.                 System.out.println(s3==s4);
  10.         }
  11. }
复制代码
怕你还是不明白,这个输出是
false
true

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

回复 使用道具 举报
Joyuang 来自手机 黑马帝 2012-2-2 21:24:59
板凳
因为你new出来的是字符串常量,字符串常量一样,在堆中地址当然一样,只是在栈中的引用不同。
ps:地铁13号线上手机回帖,悲催的大晚上往回走。
回复 使用道具 举报
彭嘉聪 发表于 2012-2-2 21:11
输出是false
两对象是不相等的,但是“123”是相等的
看图

强大啊,描述准确@
回复 使用道具 举报
本帖最后由 张伟~ 于 2012-2-2 21:57 编辑

我去谁说位置一样的,new出来的对象内存地址都是不同的,两个hello分配了各自的内存
String str1="hello";
String str2="hello";
这时才str1==str2,因为执行第一句话时,字符串池中如果没有hello这个字符串,则在池中生成hello,执行第句话时,则是直接把字符串池中已有的字符串"hello"直接赋给身str2
回复 使用道具 举报
本帖最后由 彭嘉聪 于 2012-2-2 21:51 编辑

回复错了添,郁闷
回复 使用道具 举报
易伟 黑马帝 2012-2-2 22:02:05
8#
本帖最后由 易伟 于 2012-2-2 22:05 编辑

我也来讲讲见解:
String str1=new String("hello");
String str2=new String("hello");
这里面涉及到常量池、堆、栈
首先检测常量池中有无字符串"hello",没有就创建一个,然后把它复制一份放进你在堆中创建的对象
有,就直接把它复制一份放进你在堆中创建的对象
String str1=new String("hello");因为使用了new运算符,所以在堆中会创建一个对象str1
String str2=new String("hello");");因为使用了new运算符,所以在堆中会创建一个对象str2
显然这两个对象的地址不一样,因此用==比较时,返回false,注意==比较的地址值而不是地址中的内容

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
谢谢 原来如此{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马