黑马程序员技术交流社区

标题: String s1=”hello”和String s1 = new String("hello")有什么区别? [打印本页]

作者: 罗旭维    时间: 2012-4-27 10:35
标题: String s1=”hello”和String s1 = new String("hello")有什么区别?
String s1=”hello”和String s1 = new String("hello")有什么区别?
作者: 施俊    时间: 2012-4-27 10:42
……你肯定在看老毕的String那。
s1引用指向一个对象(“hellow”)。
s2引用指向两个对象(包括new出来的那块内存空间和“hellow”)
作者: 光sail    时间: 2012-4-27 11:09
String s1 =”hello” 采取字面值赋值
1) 查找字符串池有无hello,没有则在字符串池中创建hello对象,并把s1引用指向hello对象,
2) 如果有,则直接指向存在对象
String s1 = new String("hello")
1) 首先在字符串池查找是否有无hello对象,有则不再字符串池创建,而在堆中创建,地址返回给s1
2) 字符串池没有hello对象,则在池中创建hello对象,然后再堆中创建对象,将堆中的对象地址返回给s1


作者: kevindavid    时间: 2012-4-27 11:28
String s1=”hello”和String s1 = new String("hello")有什么区别?
String s1=”hello”采取字面值赋值

1 查找字符串池有无hello,没有则在字符串池中创建hello对象,将它保存在栈内存中。并把s1引用指向hello对象,这个对象不是一个实体。
String s1 = new String("hello")
而这一句则是在查找是否有hello这个对象如果有这个对象就将它实例化然后保存在堆内存中。这个对象也就是一个实体了。并且将其内存地址赋值给s1,让S1指向这个经过实例化的对象。
当然这两个最大的区别就是   一个是实体一个不是实体        前面定个不是实体后面一个是实体。
作者: 邱俊杰    时间: 2012-4-27 14:45

String s1=”hello”   创建了一个对象、hello存在堆内存、s1指向hello
String s1 = new String("hello")  创建了两个对象、
作者: 任睦强    时间: 2012-4-27 15:48
其实没什么区别,
String s1=”hello”和String s1 = new String("hello")
前面是后面的缩写
作者: 胡奎    时间: 2012-4-27 16:00
String s1=”hello”和String s1 = new String("hello")
s1引用指向一个对象(“hellow”)。
s2引用指向两个对象(包括new出来的那块内存空间和“hellow”)
这就是却别
作者: 罗旭维    时间: 2012-4-28 23:38
谢谢大家的回答{:soso_e100:}。
作者: 根号5    时间: 2012-4-28 23:45
就是关于对象在内存中的存放问题  字符串池和堆   前者就是看字符串池中有没有,有的话就不创建了,没有就创建,后者是先看字符串池中有没有,然后再去堆内存中创建对象。所以创建了两个对象。  呵呵,来晚一步,大家快把沙发挤满了,但我还是要挤一下,也做个技术回答,求给个技术分  
作者: 错,谁的错丶    时间: 2012-4-29 00:28
其实差不多,一是直接赋值,二是通过实例调用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2