您使用StringUtils.EMPTY
代替""
吗?
我的意思是作为返回值或者设置String变量的值。我不是要进行比较,因为我们使用StringUtils.isEmpty()
答案 0 :(得分:96)
当然不是。 你真的认为“”不够清楚吗?
常量基本上有3个用例:
此处不适用。
答案 1 :(得分:49)
我使用StringUtils.EMPTY
来隐藏文字并且还表示return StringUtils.EMPTY
完全被预期,并且应该返回一个空字符串,""
可以导致假设{{1}可以很容易地变成别的东西,这可能只是一个错误。我认为""
更具表现力。
答案 2 :(得分:24)
不,只需使用""
。
文字""
清晰可见。什么意思没有误解。我不知道为什么你需要一个类常量。我只能假设在包含StringUtils
而不是""
的整个包中使用此常量。但这并不意味着你应该使用它。
如果人行道上有岩石,你不必扔掉它。
答案 3 :(得分:10)
我会在这里加上我的两分钱,因为我看不到有人在谈论String
interning和类初始化:
String
个文字都被实习,使任何 ""
和StringUtils.EMPTY
相同的对象StringUtils.EMPTY
可以初始化StringUtils
类,因为只有在未声明EMPTY
时才会访问其静态成员final
(JLS特定于此点)请参阅related answer on String interning和Class initialization,参考JLS 12.4.1。
答案 4 :(得分:10)
我很惊讶有多少人乐于盲目地认为“”确实是一个空字符串,并且(不小心?)包含任何Unicode的精彩不可见和非间距字符。为了所有善良和体面的爱,尽可能使用EMPTY。
答案 5 :(得分:8)
我真的不想使用它,因为return "";
比return StringUtils.EMPTY
短。
但是,使用它的一个 false 优势是,如果键入return " ";
而不是return "";
,则可能会遇到不同的行为(关于如果正确测试空字符串)或不)。
答案 6 :(得分:4)
如果你的班级没有使用其他任何来自公共场所的东西,那么仅仅因为这个神奇的价值而具有这种依赖性是很可惜的。
StringUtils的设计者大量使用这个常量,这是正确的做法,但这并不意味着你也应该使用它。
答案 7 :(得分:1)
不,因为我还有更多要写的东西。 empty String是独立于平台的空(在Java中)。
File.separator
优于“/”或“\”。
但随心所欲。你不能得到像return " ";
答案 8 :(得分:1)
老实说,我也没有看到太多的用处。如果你想比较一个空字符串,只需使用StringUtils.isNotEmpty(..)
答案 9 :(得分:1)
我发现StringUtils.EMPTY
在某些情况下对于易读性非常有用。特别是:
三元运算符,例如。
item.getId() != null ? item.getId() : StringUtils.EMPTY;
同样通过使用常量,可以创建对StringUtils.EMPTY
的引用。否则,如果每次JVM必须检查字符串池中是否存在字符串文字""
,那么它就会尝试实例化它(它可能会存在,因此不会产生额外的实例创建开销)。当然使用StringUtils.EMPTY
可以避免检查字符串池吗?
答案 10 :(得分:0)
是的,这很有道理。 这可能不是唯一的方法,但我说这种“没有道理”的方式很少。
我认为:
答案 11 :(得分:0)
我建议将此常量用作健壮代码的基本组成部分之一,以降低在为变量分配空字符串时偶然出现不可见字符潜入的风险。
如果您的团队中有来自世界各地的人员,也许其中一些人经验不足,那么在代码中坚持使用此常量可能是个好主意。
周围有许多不同的语言,人们在计算机上使用自己的本地字母设置。有时他们只是忘记在编码时切换回去,而在使用退格键切换和删除后,文本编辑器会在“”中留下一些垃圾。使用echo 3 > /proc/sys/vm/drop_caches
可以消除这种风险。
但是,这不会对代码的性能或代码的可读性产生任何重大影响。此外,它不能解决您可能遇到的一些基本问题,因此完全取决于您是否将使用此常数的明智判断。