锁定老帖子 主题:Java堆.栈和常量池 笔记
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-28
学习啊!但是老大你讲的好绕哦!
|
|
返回顶楼 | |
发表时间:2011-01-13
gteam.yu 写道 yqfly2008 写道 zjhzjf000 写道 qiren83 写道 很久没看到这么高质量的贴子 学到很多
比起有人在CSDN和JY上天天讨论 String i = "ddd"+new String("KK"); 成生几个对象 这贴子站在更高的层面上了 我收藏+收藏夹+右键另存为 好帖! 那位帅哥美女 说说到底是几个啊 我不知道啊 4个 "kk", new.., "ddd", i 先看"kk",在常量池中生成第一个,在堆中new了一个String对象指向常量池中的"kk","ddd"道理同"kk",最后看 最左边,在栈中声明了一个String 对象 i 分别指向常量池中的"ddd" 和 堆中的new出来的String对象, 可能说的不太清楚,有错请指出,谢谢 4个应该是没有错的,但是楼上说的 "在栈中声明了一个String 对象 i 分别指向常量池中的"ddd" 和 堆中的new出来的String对象" 好象不太正确,JDK文档中说String一旦创建了就不能改变,我个人感觉应是 "ddd"+new String("kk")在堆里重新创建了一个String Object,i就指向这个新的Object. (个人理解不对的地方大家说说,防止误导他人) 新的jdk对于+号应该是产生一个StringBuilder类来做链接操作的 |
|
返回顶楼 | |
发表时间:2011-01-17
longxiaoyan 写道
今天复习了一下这些知识,顺便做了下笔记. String s1 = "china"; String s2 = "china"; String s3 = "china"; String ss1 = new String("china"); String ss2 = new String("china"); String ss3 = new String("china"); 这里解释一下黄色这3个箭头,对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。这也就是有道面试题:String s = new String(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。
int i1 = 9; int i2 = 9; int i3 = 9; public static final int INT1 = 9; public static final int INT2 = 9; public static final int INT3 = 9;
class BirthDate { private int day; private int month; private int year; public BirthDate(int d, int m, int y) { day = d; month = m; year = y; } 省略get,set方法……… } public class Test{ public static void main(String args[]){ int date = 9; Test test = new Test(); test.change(date); BirthDate d1= new BirthDate(7,7,1970); } public void change1(int i){ i = 1234; }
|
|
返回顶楼 | |
发表时间:2011-03-05
meiowei 写道 老大 写两句话不行吗? 整3张图真闹心 堆-->对象的引用 栈-->对象值 常量池-->常量值,类变量,etc...
老大 你搞错了吧! |
|
返回顶楼 | |
发表时间:2011-04-03
不错,感谢LZ!
|
|
返回顶楼 | |