1.String对象创建的两种方式
简述一下两种String对象创建的方式区别:
// 直接赋值 String name = "hsp"; System.out.println(name); // 调用构造器赋值 String wodeshijie = new String("hsp"); System.out.println(wodeshijie);
直接赋值:
先在常量池中看是否存在该字符串,存在则直接指向,不存在则创建后指向
new的方式:先在堆中新建一个对象空间,通过value数组在常量池中寻找该字符串,有的话就将地址返回给value,没有的话就先创建再将地址返回给value
经典面试题A:😒
String a = "hello" + "world"; 以上的代码创建了几个对象?
答:会创建一个对象,编译器会对该代码进行优化,a存储的字符串等价于helloworld
经典面试题B:😊
String a = "hello"; String b = "world"; String c = a + b; 以上的代码创建了几个对象?
答:会创建三个对象,a对象和b对象,c对象的创建其实是在堆中,堆中的地址指向字符串常量池的一个helloworld对象😀
常量相加看的是池,变量相加是在堆中!

