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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 280270738 中级黑马   /  2013-6-18 08:55  /  1805 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String str=“hello”
String声明的是什么?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

11 个回复

倒序浏览
一个对象,他的内容是一个字符串"hello"

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
String 在常量池创建一个hello的字符串

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
声明的是一个字符串对象,str存放的是字符串"hello”的引用。"hello”被存放在常量池中
如果字符串"hello”在此之前被创建过,那么会从常量池中直接取"hello”的引用赋给字符串变量str

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
String s 相当于声明一个String
因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。str原先指向一个String对象,内容是 "Hello",
如果我们对str进行了操作,那么str所指向的那个对象是否发生了改变呢?
答案 是没有。这时,str不指向原来那个对象了,而指向了另一个 String对象,原来那个对象还存在于内存之中,只是str这个引用变量不再指向它了。
通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。
同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
声明一个为String类型的str ,且该str的引用指向“hello”
且在常量池中建立了一个对象。当需要使用时,如果之前创建过就直接从常量池中调用hello
进而来指向引用str。如果之前的常量池中没有则创建一个。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
加油楼主  以后记得详细描述问题
回复 使用道具 举报
007诸葛亮 发表于 2013-6-18 09:35
String s 相当于声明一个String
因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象 ...

答得比较详细。
回复 使用道具 举报
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(“” ) 时

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

是在堆中创建一个字符串对象,并把引用放在栈中指向他的首地址。
回复 使用道具 举报 1 0
一个字符串就是一个String类的匿名对象。
回复 使用道具 举报

多谢师兄,夸奖!:victory:
回复 使用道具 举报
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马