A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问"hi"和new String("hi")有什么区别?

4 个回复

倒序浏览
String s = "hi";  在栈内存中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"hi",如果没有,则将"hi"存放进栈,并令s指向”hi”,如果已经有”hi” 则直接令s指向“hi”。
String s = new String("hi");用new来新建对象的,它会在存放于堆内存中。每调用一次就会创建一个新的对象。
回复 使用道具 举报
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")
回复 使用道具 举报
楼主想说的是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");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
回复 使用道具 举报
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,因为他们的内容相同。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马