String s1 = "ja"; //在常量池中创建一个对象"ja"
String s2 = "va"; //在常量池中创建一个对象"va"
String s4 = s1+s2;//这里具体是什么情况? // 在常量池中创建一个对象"java"
String s3 = "ja"+"va"; //仅做相连接运算,常量池中创建一个对象"java"与s4内存地址不同,但内容相同
String s5 = "java"; //没有创建对象指向常量池中的"java",既s3 == s5
String s6 = new String("java"); //常量池中有java,克隆给堆内存,创建一个对象
请问这段代码创建了几个对象?请详细说明步骤和知识点
//所以一共创建了5个对象,
1.那为什么s3==s4是false呢?
//因为 == 在字符串中比较的是内存地址值,不同,而如果用equals()就相等,在字符串中比较内容
2.String str = new String(“asas”);是不是str指向堆内存中对象,堆内存对象再指向常量池的asas
也就是说此时内存中是不是就常量池中一个asas,堆内存中的对象只是存着一个asas的引用呢?
//不是引用而是由于asas是字符串类型,所以在常量池中查找,没有就创建"asas",然后再对内存中copy下来 |