String s1=new String("5fen");
String s2=new String("5fen");
为什么会是3个对象呢?这3个对象又分别是什么呢?String s2=new String("5fen");
为什么会是2个对象呢?这2个对象又分别是什么呢?
我看了下API,但是还是不是很清楚,希望大家指点下,麻烦说的详细点,小弟感激不尽...
String s2=new String("5fen");
为什么会是3个对象呢?这3个对象又分别是什么呢?String s2=new String("5fen");
为什么会是2个对象呢?这2个对象又分别是什么呢?
我看了下API,但是还是不是很清楚,希望大家指点下,麻烦说的详细点,小弟感激不尽...
还有堆里有2个String,也就是s1 s2
所以String s1=new String("5fen");
String s2=new String("5fen");
三个对象
你现在记住 ‘5fen’这是什么一个对象
String s1
String s2
这又是两个 记着就行了
如果使用new关键词,首先就会检查字符串池中是否有“5fen”,
如果有,则直接在栈中建立一个新的字符串对象“5fen”,例如:String s = "5fen"; String s1 = new String("5fen");这两句话分别产生一个对象,一个在池中,一个在栈中
如果没有,则先在字符串池中新建一个“5fen”,然后再在栈中新建一个对象“5fen",例如:String s1 = new String("5fen");这一句话总共产生了2个对象,一个在池中,一个在栈中
String s2=new String("5fen");
第一句话,由于字符串池中还没有"5fen",所以现在字符串池中新建了一个"5fen"对象,然后再在栈中新建一个字符串对象"5fen",一共是2个对象
第二句话,字符串池中已经有一个“5fen”了(第一句中生成),所以不再在字符串池中生成这个“5fen”对象,所以直接在栈中建立一个新的对象“5fen”,就是第3个对象(每次用new都会建立一个新对象,不管之前有否出现过)
s1,s2是new出来的在堆里
共3个对象
为什么会首先去字符串池里检查是否有"5fen"对象呢?
String s2 = new String("5fen");首先,会在字符串池中创建一个不可变的字符序列,内容是"5fen",然后分别在堆中创建了2个对象,s1指向堆中的第一个对象,而对象会指向这个字符序列。s2也一样。这样,在这个内存中,就出现了3个对象。理解了第一个问题,第2个不就清楚了么。呵呵
String s2=new String("5fen");
是3个对象
对象分别按顺序是:s1 、 5fen 、 s2
分析:if(s1==5fen){
if(s1==s2)
if(s2==5fen)
运行结果是:false false false String s2=new String("5fen");
2个对象
对象分别按顺序是: s2 、 5fen
if(s2==5fen)
运行结果是: false总结:如果是一个对象的话,它们就会相等。