本帖最后由 黄奕豪 于 2012-5-23 13:37 编辑
今天终于进入第十三天的学习了,可是刚看了第一个视频就有疑惑了,希望大家指点指点
第一:毕老师说了,下面str1和str2的区别在于str1在内存中有一个对象,str2有两个对象,那具体是哪两个对象?难道说是堆内存中new了一个String对象算一个,然后里面包含了前面的“abc”对象么?
String str1 = "abc";
String str2 = new String("abc");
第二:还是这两个对象,用 str1.equals(str2) 比较的结果是True,明白了,是因为String复写了Object的方法,比较的是内容,可是 str1 == str2 呢?这个难道就是Object里面的方法么?它比较的也是地址值么?
String str1 = "abc";
String str2 = new String("abc");
第三:常量池的问题,系统内有个常量池,毕老师说了这是一个字符数组存储的!那我们新建的String str1 = "abc";对象里面,“abc”里面存的是常量池字符数组的角标(95、96、97)呢?还是abc这几个字符的值?又或者是新建完“abc”以后,将“abc”存回这个常量池,作为一个新的常量供下一个字符串对象使用?(个人觉得这个没可能吧,不算符号字符,就算26个字母,排列组合出来得要多大的存储啊!但是毕老师的视频里面似乎是这样说的,不知道是我理解错了,还是真的是这样!)
第四:字符串对象一旦初始化就不能改变,那String str1 = "abc"; str1 = "abc"+"d";后面的语句执行后,堆内存中的变化是这样么?先新建一个“d”对象,然后根据对象“abc”和“d”的内容新建一个“abcd”对象,再把“abcd"对象的地址值赋值给 str1,接着“abc”和“d”被垃圾回收,是这样理解么?
小学数学没学好,伸两个手指问4个问题,还希望各路豪杰多担待啊!!还有多谢沙发童鞋的指正,改过来了!!是String str2 = new String("abc");不是:String str2 = new String("abd");刚看美女,大意了,莫见怪啊!!
|