栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java == for String对象停止工作了吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java == for String对象停止工作了吗?

由于

String
实例是不可变的
,因此Java语言能够进行一些优化,以使
String
文字(或更一般而言,
String
其值为编译时间常数)可以
插入并实际上引用同一(即
==
)对象。

[JLS

3.10.5字符串文字](http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5)

每个字符串文字都是对实例的引用

classString
String
对象具有恒定值。使用方法,可以对字符串文字(或更一般而言,是常量表达式的值的字符串)进行“
interned”,以便共享唯一的实例
String.intern

这就是为什么您得到以下信息的原因:

System.out.println("yes" == "yes"); // trueSystem.out.println(99 + "bottles" == "99bottles"); // trueSystem.out.println("7" + "11" == "" + '7' + '1' + (char) (50-1)); // trueSystem.out.println("trueLove" == (true + "Love")); // trueSystem.out.println("MGD64" == "MGD" + Long.SIZE);

也就是说它需要说,你应该 依赖

==
String
一般的比较,而应该使用
equals
针对非
null
instanceofString
。特别是,请不要为自己
intern()
所有的东西而着迷,
String
以便在
==
不知道字符串实习如何工作的情况下使用它。


new String(...)

如果出于某些特殊原因需要创建 两个

String
对象
(因此不是
==
定义的对象)并且仍然是
equals
,则可以使用此构造函数,其中包括:

public String(Stringoriginal)
:初始化一个新创建的
String
对象,使其代表与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。
除非需要显式的原始副本,否则不需要使用此构造函数,因为
Strings
它们是不可变的

因此,您可以拥有:

System.out.println("x" == new String("x")); // false

new
操作者总是创建一个新对象,因此上述被保证打印
false
。也就是说,这实际上通常不是您真正需要做的事情。只要有可能,您应该只使用字符串文字,而不是
newString
为其显式创建一个。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号