黑马程序员技术交流社区
标题:
请问"hi"和new String("hi")有什么区别?
[打印本页]
作者:
黑马王冬冬
时间:
2012-7-26 00:43
标题:
请问"hi"和new String("hi")有什么区别?
请问"hi"和new String("hi")有什么区别?
作者:
孙建飞
时间:
2012-7-26 00:58
String s = "hi"; 在栈内存中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"hi",如果没有,则将"hi"存放进栈,并令s指向”hi”,如果已经有”hi” 则直接令s指向“hi”。
String s = new String("hi");用new来新建对象的,它会在存放于堆内存中。每调用一次就会创建一个新的对象。
作者:
李菁
时间:
2012-7-26 01:03
String a="hi"
先查找栈里有没有"hi",如果有就用a引用这个值,如果没有就把“hi”存进栈
String a=new String("hi")
在堆里面建立的对象a,就是不管内存里是不是已经有"hi"这个对象,都新建一个对象保存"hi"
String a="hi"
生成一个对象 "hi"
String a=new String("hi")
生成两个对象,"hi"和new String ("hi")
作者:
张扬123
时间:
2012-7-26 01:10
楼主想说的是string s="hi"和string s=new string("hi")的区别吧?
这个问题我给你总结一下:
string s="hi" string s=new string("hi")
是赋值语句 是实例化语句
存储在栈里 存储在堆里
效率高 效率低
也可以这么理解:
String s= "hi"; 先在内存中找是不是有"hi" 这个对象,如果有,就让str指向那个"hi".如果内存里没有"hi",就创建一个新的对象保存"hi".
String s=new String ("hi"); 就是不管内存里是不是已经有"hi"这个对象,都新建一个对象保存"hi".
使用String s = "hi";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String s = new String("hi");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
作者:
曹俊
时间:
2012-7-26 01:58
String s1 ="hi"和String s2 = new String("hi");是有区别的:
String s1 = "hi"
//这是在常量池中创建了一个字符串对象。
String s2 = new String("hi");
//这是在堆内存创建了一个String类的对象,并在常量池里创建了字符创"hi"对象。
当System.out.println(s1==s2);时,打印出的值是false,因为他们所指的对象不同。
当System.out.println(s1.equals(s2));时,打印输出的值为true,因为他们的内容相同。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2