为了账号安全,请及时绑定邮箱和手机立即绑定

Java字符串:“String s=新字符串(”愚蠢“);

Java字符串:“String s=新字符串(”愚蠢“);

翻过高山走不出你 2019-07-10 15:07:05
Java字符串:“String s=新字符串(”愚蠢“);我是一个学习Java的C+的人。我正在阅读有效的Java,有些东西让我感到困惑。它说永远不要写这样的代码:String s = new String("silly");因为它创造了不必要的String物品。相反,它应该是这样写的:String s = "No longer silly";好吧,到目前为止…但是,考虑到这门课:public final class CaseInsensitiveString {     private String s;     public CaseInsensitiveString(String s) {         if (s == null) {             throw new NullPointerException();         }         this.s = s;     }     :     :}CaseInsensitiveString cis = new CaseInsensitiveString("Polish");String s = "polish";为什么第一条声明没问题?不是应该吗CaseInsensitiveString cis = "Polish";我该怎么做CaseInsensitiveString表现得像String所以上面的语句是OK的(有和没有扩展String)?是什么让字符串能够像那样传递一个文字呢?根据我的理解,Java中没有“复制构造器”的概念?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

String是一门特殊的内建语言。是为了String班级,等级你应该避免说

String s = new String("Polish");

因为文字"Polish"已经是类型了String,而您正在创建一个额外的不必要的对象。对于其他任何一门课,他说

CaseInsensitiveString cis = new CaseInsensitiveString("Polish");

是正确的(而且只在这种情况下)要做的事情。


查看完整回答
反对 回复 2019-07-10
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我认为使用文字形式(即“foo”而不是新字符串(“foo”)的主要好处是,所有字符串文本都由VM‘实习生’。换句话说,它被添加到池中,这样创建相同字符串的任何其他代码都将使用池字符串,而不是创建新实例。

为了举例说明,下面的代码将为第一行打印true,而对于第二行则为false:

System.out.println("foo" == "foo");System.out.println(new String("bar") == new String("bar"));


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 491 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号