当前位置:  开发笔记 > 编程语言 > 正文

使一个空字符串值得吗?

如何解决《使一个空字符串值得吗?》经验,为你挑选了5个好方法。

我有一个同事发誓

//in a singleton "Constants" class
public static final String EMPTY_STRING = "";

在整个项目中可用的常量类中.这样,我们可以写出类似的东西

if (Constants.EMPTY_STRING.equals(otherString)) {
    ...
}

代替

if ("".equals(otherString)) {
    ...
}

我说是的

    不值得 - 它不会保存堆/堆栈/字符串池中的任何空间,

    丑陋

    滥用常数类.

谁是这里的白痴?



1> Dan Dyer..:

字符串常量默认实习,所以无论你有多少次是指""代码,将只有一个空的String对象.我没有看到声明EMPTY_STRING有任何好处.否则,你也可以为整数文字声明一个,两个,三个,四个等.

当然,如果你想稍后更改EMPTY_STRING的值,将它放在一个地方很方便;)


所有"常量表达式"的文字和值都是实体.请参阅JVM规范:http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#20359
所有空的String*文字*.您可以创建其他不同的String对象,这些对象也是空的.

2> Douglas Squi..:

为什么你想在Java中使用全局变量?詹姆斯戈斯林真的试图摆脱他们; 请不要带回来.

0 == possiblyEmptyString.length()

要么

possiblyEmptyString.isEmpty() // Java 6 only

同样清楚.


除非possibleEmptyString为null,否则你得到一个NPE

3> 小智..:

我更喜欢看EMPTY_STRING.

它使它成为英语."".equals'读取'与EMPTY_STRING.equals不同.


没有理由对此进行修改.

4> David Arno..:

具有讽刺意味的是,常数的重点是使它们易于改变.因此,除非你的同事计划将EMPTY_STRING重新定义为空字符串以外的东西 - 这将是一件非常愚蠢的事情 - 将一个真正的固定构造(例如"")转换为常量是一件坏事.

正如Dan Dyer所说,它就像将常数定义为1:它完全没有意义,如果有人重新定义它,那将是完全混乱的 - 可能有风险.



5> 小智..:

好吧,我也可以猜,但我做了一个快速测试...几乎像作弊...

使用各种方法检查任意字符串.(几次迭代)

结果表明isEmpty()更快,更可读; 如果isEmpty()不可用,则length()是一个不错的选择.

使用常量可能不值得.

"".equals(someString())      :24735 ms
t != null && t.equals("")    :23363 ms
t != null && t.equals(EMPTY) :22561 ms
EMPTY.equals(someString())   :22159 ms
t != null && t.length() == 0 :18388 ms
t != null && t.isEmpty()     :18375 ms
someString().length() == 0   :18171 ms

在这种情况下;

"IAmNotHardCoded".equals(someString())

我建议在相关位置定义一个常量,因为所有常量的全局类真的很糟糕.如果没有相关的地方,你可能做错了什么......

Customer.FIELD_SHOE_SIZE //"SHOE_SIZE"

可能被视为相关的地方;

CommonConstants.I__AM__A__LAZY__PROGRAMMER // true

不是.

对于BigIntegers和类似的东西,我倾向于最终在本地定义一个最终的静态; 喜欢:

private final static BigDecimal ZERO = new BigDecimal(0);
private final static BigDecimal B100 = new BigDecimal("100.00");

多数民众赞成在我身上,对于BigInts和BigDecimals来说,不会有一些糖...

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有