黑马程序员技术交流社区

标题: int String 问题 [打印本页]

作者: kkopopo    时间: 2014-3-1 12:00
标题: int String 问题
本帖最后由 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个的有啥不同吗在存储上?
声明:此贴不是刷分的 是本人确实菜,很多简单知识理解不了! 求大神赐教!



作者: 乔青山    时间: 2014-3-1 14:37
本帖最后由 乔青山 于 2014-3-1 14:43 编辑

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

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

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

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


作者: volvoxc    时间: 2014-3-1 15:16
我的理解是,a,b,s这三个变量在栈中,基本数据类型的2也在栈中。对象3和“abc"在堆中。最后一个问题我也觉得没什么不同,都是在堆中产生一个对象。谁还有更深的理解,可以来说的更清楚一点儿。
作者: kkopopo    时间: 2014-3-1 23:17
乔青山 发表于 2014-3-1 14:37
a要看是成员变量还是局部变量了,成员变量就随对象分配在堆中,局部变量就随方法的调用分配在栈中。
b虽然 ...

谢谢!谢谢!
作者: kkopopo    时间: 2014-3-1 23:36
volvoxc 发表于 2014-3-1 15:16
我的理解是,a,b,s这三个变量在栈中,基本数据类型的2也在栈中。对象3和“abc"在堆中。最后一个问题我也觉 ...

谢谢!谢谢!
作者: zjf    时间: 2014-3-1 23:56
本帖最后由 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







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