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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kkopopo 中级黑马   /  2014-3-1 12:00  /  1600 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kkopopo 于 2014-3-1 12:15 编辑

int a  =2;Integer b = 3;
String s = "abc";


求问 a , b , s , 2 ,  3 ,  "abc",分别存在内存的哪里?

最后再问一下:
Integer a = 3;
Integer  b = new Integer(3);
这2个的有啥不同吗在存储上?
声明:此贴不是刷分的 是本人确实菜,很多简单知识理解不了! 求大神赐教!


评分

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

查看全部评分

5 个回复

倒序浏览
本帖最后由 乔青山 于 2014-3-1 14:43 编辑

a要看是成员变量还是局部变量了,成员变量就随对象分配在堆中,局部变量就随方法的调用分配在栈中。
b虽然是指向一个对象,但是存储方式仍然同a。
s的存储方式同a。

2随a走,a在哪2在哪。
3不随b走,在堆中。“abc”在常量池中。

最后Integer两种不同写法在存储上的问题,个人感觉没有不同,都会有一个对象。

//当然,这只是个人理解,我对内存的理解上也没那么细致,所以这也不一定都对。

评分

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

查看全部评分

回复 使用道具 举报
我的理解是,a,b,s这三个变量在栈中,基本数据类型的2也在栈中。对象3和“abc"在堆中。最后一个问题我也觉得没什么不同,都是在堆中产生一个对象。谁还有更深的理解,可以来说的更清楚一点儿。

评分

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

查看全部评分

回复 使用道具 举报
乔青山 发表于 2014-3-1 14:37
a要看是成员变量还是局部变量了,成员变量就随对象分配在堆中,局部变量就随方法的调用分配在栈中。
b虽然 ...

谢谢!谢谢!
回复 使用道具 举报
volvoxc 发表于 2014-3-1 15:16
我的理解是,a,b,s这三个变量在栈中,基本数据类型的2也在栈中。对象3和“abc"在堆中。最后一个问题我也觉 ...

谢谢!谢谢!
回复 使用道具 举报
本帖最后由 zjf 于 2014-3-1 23:58 编辑

Integer  b = new Integer(3);创建了两个对象,我觉得它不同于Integer a = 3;
还有一个,在byte范围内的值,直接赋值给Integer,是从常量池里面获取的。
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);// false
System.out.println(i1.equals(i2));// true

Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);// false
System.out.println(i3.equals(i4));// true

Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);// false
System.out.println(i5.equals(i6));// true

Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8);// true
System.out.println(i7.equals(i8));// true


评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马