前提:首先要知道String类在内存中有一个对应的string池;string s1 ="abc"和string s2 = new string("abc")的区别;
先分析一下string s1 = “abc”语句:首先程序会到string池中寻找是否存在"abc"这个对象,如果有的话,那么s1引用就会指向池中"abc"对象,如果没有的话,就会在在池中创建一个"abc"对象并且指向它。
然后再来分析一下String s2 =new string("abc")语句:首先程序会到string池中寻找是否存在"abc"这个对象,如果有的话,那么就在堆内存中创建一个"abc"对象并指向它;如果没有的话,就会在string池中创建一个"abc"对象,然后再到堆内存中创建一个"abc”对象并指向它。所以string s2 = new string("abc")实质上就是创建了两个对象。这就是毕老师视频中所说的string s1 =“abc”和string s2 = new string("abc")区别的原理。
转入正题,回答你的提问:按照以上理论,s1和s2都应该指向string池中的同一个"abc"对象,并没有在堆内存中创建对象,所以它们的地址值都是一样的。因为string类在内存中存在string池这个概念,所以至于其他类有没有这个情况,我回答不了(知识还没深入到那种地步^_^,抱歉啰!)。希望我的回答可以帮助到你...相互交流!{:soso_e100:} |