由于字符串在Java中是不可变的,我为什么要使用无参数的String构造函数并创建一个对象?在Java中,是String s = new String()有没有用?
如何对我有用的变量s
我这样做后:
String s = new String();
由于字符串在Java中是不可变的,我为什么要使用无参数的String构造函数并创建一个对象?在Java中,是String s = new String()有没有用?
如何对我有用的变量s
我这样做后:
String s = new String();
new String()
是一个空字符串。这可能是一个方法的返回值,例如,如果你没有更有意思的返回值。使用文字""
可能会更好,因为文字空字符串值已经被执行。
它是一个空字符串,相当于""
。从javadoc:
初始化一个新创建的String对象,以便它表示一个空的字符序列。请注意,由于字符串是不可变的,因此不需要使用此构造函数。
编辑:使用这个词相当于的
选择不当。为了澄清以下所有的true
:
"" == ""
"" != new String()
"".equals(new String())
由于字符串在Java中是不可变的,我为什么要使用参数较少String构造,并创建一个对象?
的唯一原因是,如果你想创建一个字符串,这是equal
到""
但不等同于它。即使如此,它更可能是你打电话new String(str)
其中str
指的是一个空字符串。
构造函数提供的真正原因尚不完全清楚。然而它并没有什么坏处,并且在开始时可能有一些原因(在Java被称为Java之前)。
有趣的事实:.NET没有这种形式(no-arg字符串构造函数) – 2012-03-11 00:08:07
@pst - 只有在您认为这是一个有趣的问题时才有意思。我的观点是,从实际的角度来看,无处不在的方法/构造函数的存在(或不存在)是无关紧要的。 – 2012-03-11 02:50:04
@StephenC:我发现无用的方法或构造函数会分散注意力。当我看到一个新的API时,我希望它尽可能简单。无用的方法让我阅读更多的文档,我必须决定*不*使用它们。 – 2012-03-11 15:00:47
“等值”...但“相同”? 'new String()==“”'? – 2012-03-11 00:10:07
@pst'new String()==“”'将会是false。他们不代表相同的对象,因为字符串对象不是来自实习生池。 – Jivings 2012-03-11 02:13:40