2019.07.05问题及解析
题目
String str1 = new String("hello");
String str2 = new String("hello");
String str3 = "hello";
String str4 = "he" + "llo";
String str5 = "he";
String str6 = "llo";
请问下列输出true的是?
A.str1 == str2
B.str2 == str3
C.str3 == str4
D.str4 == (str5 + str6)
String类型会指向堆内存中的存储空间,因此当通过==对String类型进行比较时,比较的是相应变量的地址。只要指向的是同一地址则两个String类型==比较返回true,如果指向的是不同地址则返回false。
A.str1、str2都new了一个新的String变量,因此指向不同地址,false
B.str2开辟新的内存空间,因此与str3不是指向同一地址,false
C.两个字符串通过+拼接,本质在编译时会自动变换为一个字符串,相当于str4 = "hello",str3已经有所定义,因此会与str3指向同一地址,true
D.两个单独的String变量通过+拼接,本质是new一个新的String变量,因此会开辟新的内存空间,因此与str4不是指向同一地址,false
答案选C
2019.07.06问题
String——比较
JVM内存不包含如下哪个部分?
A.Heap
B.Heap Frame
C.PC寄存器
D.Stacks