黑马程序员技术交流社区

标题: String类对象 [打印本页]

作者: 280270738    时间: 2013-6-18 08:55
标题: String类对象
String str=“hello”
String声明的是什么?
作者: 孙茜茜    时间: 2013-6-18 09:10
一个对象,他的内容是一个字符串"hello"
作者: yasyas001    时间: 2013-6-18 09:19
String 在常量池创建一个hello的字符串
作者: Heart    时间: 2013-6-18 09:19
声明的是一个字符串对象,str存放的是字符串"hello”的引用。"hello”被存放在常量池中
如果字符串"hello”在此之前被创建过,那么会从常量池中直接取"hello”的引用赋给字符串变量str
作者: 007诸葛亮    时间: 2013-6-18 09:35
String s 相当于声明一个String
因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。str原先指向一个String对象,内容是 "Hello",
如果我们对str进行了操作,那么str所指向的那个对象是否发生了改变呢?
答案 是没有。这时,str不指向原来那个对象了,而指向了另一个 String对象,原来那个对象还存在于内存之中,只是str这个引用变量不再指向它了。
通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。
同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。
作者: 姚志远    时间: 2013-6-18 10:14
声明一个为String类型的str ,且该str的引用指向“hello”
且在常量池中建立了一个对象。当需要使用时,如果之前创建过就直接从常量池中调用hello
进而来指向引用str。如果之前的常量池中没有则创建一个。
作者: 袁梦希    时间: 2013-6-18 12:54
加油楼主  以后记得详细描述问题
作者: 袁梦希    时间: 2013-6-18 12:57
007诸葛亮 发表于 2013-6-18 09:35
String s 相当于声明一个String
因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象 ...

答得比较详细。
作者: 月时微    时间: 2013-6-18 13:04
Java中String  s1 ;  String  s2=null ;  String  s3=”” ;  String  s4=new String(“”) ; 的区别。

======================================================================

当声明为String  s1时

声明一个字符串对象,分配了一个内存空间,没有进行初始化,没有存入任何对象。

成员变量:

JAVA为安全原因不允许一个悬挂引用,没有赋值的引用地址一律自动赋值为NULL,以防止访问到任意内存。

局部变量:

局部变量是不会自动初始化的,必须显示地赋初始值。如果没有赋初始值,在用System.out.println(s1);时会报错。

----------------------------------------------------------------------------------------------------------------------

当声明为String  s2 = null时

声明一个字符串对象,分配了一个内存空间,进行初始化,存入了一个空对象,值为空。

NULL代表声明了一个空对象,根本就不是一个字符串。除了=和==,对空对象做任何操作都不行的,运行时会报异常。

----------------------------------------------------------------------------------------------------------------------


当声明为String  s3 = “” 时

声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象,值为””。

是在字符串常量池(栈中)存入了一个字符串常量,并用引用指向他。

当声明为String  s3 = new  String(“” ) 时

声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象

是在堆中创建一个字符串对象,并把引用放在栈中指向他的首地址。

作者: zhengweicong    时间: 2013-6-18 13:49
一个字符串就是一个String类的匿名对象。
作者: 007诸葛亮    时间: 2013-6-19 11:00
袁梦希 发表于 2013-6-18 12:57
答得比较详细。

多谢师兄,夸奖!:victory:
作者: 孙百鑫    时间: 2013-6-25 00:05
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。




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