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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s1=”hello”和String s1 = new String("hello")有什么区别?

9 个回复

倒序浏览
……你肯定在看老毕的String那。
s1引用指向一个对象(“hellow”)。
s2引用指向两个对象(包括new出来的那块内存空间和“hellow”)
回复 使用道具 举报
String s1 =”hello” 采取字面值赋值
1) 查找字符串池有无hello,没有则在字符串池中创建hello对象,并把s1引用指向hello对象,
2) 如果有,则直接指向存在对象
String s1 = new String("hello")
1) 首先在字符串池查找是否有无hello对象,有则不再字符串池创建,而在堆中创建,地址返回给s1
2) 字符串池没有hello对象,则在池中创建hello对象,然后再堆中创建对象,将堆中的对象地址返回给s1

回复 使用道具 举报
String s1=”hello”和String s1 = new String("hello")有什么区别?
String s1=”hello”采取字面值赋值

1 查找字符串池有无hello,没有则在字符串池中创建hello对象,将它保存在栈内存中。并把s1引用指向hello对象,这个对象不是一个实体。
String s1 = new String("hello")
而这一句则是在查找是否有hello这个对象如果有这个对象就将它实例化然后保存在堆内存中。这个对象也就是一个实体了。并且将其内存地址赋值给s1,让S1指向这个经过实例化的对象。
当然这两个最大的区别就是   一个是实体一个不是实体        前面定个不是实体后面一个是实体。
回复 使用道具 举报

String s1=”hello”   创建了一个对象、hello存在堆内存、s1指向hello
String s1 = new String("hello")  创建了两个对象、
回复 使用道具 举报
其实没什么区别,
String s1=”hello”和String s1 = new String("hello")
前面是后面的缩写
回复 使用道具 举报
胡奎 中级黑马 2012-4-27 16:00:23
7#
String s1=”hello”和String s1 = new String("hello")
s1引用指向一个对象(“hellow”)。
s2引用指向两个对象(包括new出来的那块内存空间和“hellow”)
这就是却别
回复 使用道具 举报
谢谢大家的回答{:soso_e100:}。
回复 使用道具 举报
就是关于对象在内存中的存放问题  字符串池和堆   前者就是看字符串池中有没有,有的话就不创建了,没有就创建,后者是先看字符串池中有没有,然后再去堆内存中创建对象。所以创建了两个对象。  呵呵,来晚一步,大家快把沙发挤满了,但我还是要挤一下,也做个技术回答,求给个技术分  
回复 使用道具 举报
其实差不多,一是直接赋值,二是通过实例调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马