String S1=“imooc”;
String S2=new String("imooc");
请问S1与S2区别在哪?
没区别,一个是直接定义,另一个是通过创建一个对象的方式进行定义
是有区别,学语言最怕得过且过。
区别在于,第一个在字符串常量池中创建。第二个实际在堆上。如果用==来比较两个字符串返回的是false。应为==是比较地址。字符串常量池不是栈哦
这实例化种方法一般会在堆内存中开辟两个空间,只用一个,比较浪费资源;所以一般采用直接赋值法
个人感觉是通过S1的方式创建的字符串是存放在栈区中的,而S2的创建方式是创建在堆中的,所以二者地址不一样,使用==得到的也是false