你用StringUtils.EMPTY代替""吗?
我的意思是作为返回值,或者设置String变量的值。我不是要进行比较,因为我们在那里使用StringUtils.isEmpty()
Answers:
当然不是。您是否真的认为“”不够清晰?
常量本质上有3个用例:
在此均不适用。
EMPTY不具有空字符串本身还没有的任何含义。最值得注意的是,它没有说明您为什么决定在特定情况下使用空字符串。命名常量ONE和假装使用该常量代替值没有什么不同。
我StringUtils.EMPTY用来隐藏文字,并表达return StringUtils.EMPTY完全期望的内容,并应该返回一个空字符串,这""可能导致""可以轻易更改为其他内容的假设,而这也许只是一个错误。我认为这EMPTY更具表现力。
StringUtils.EMPTY 少比表现""。
""比使用来更具表现力StringUtils.EMPTY,而您所说的话并没有改变我的想法。我几乎可以相信,开发人员偶尔会错误地写出一个空字符串文字-但是,我将把字符串文字的清晰度视作百万分之一(很容易在测试中找到,希望... )错误,亲自。
令我惊讶的是,有多少人乐于盲目地假设“”确实是一个空字符串,并且不(偶然地?)不包含Unicode的任何出色的不可见和非间距字符。为了爱所有善良和体面的人,请尽可能使用EMPTY。
我将在此处添加两美分,因为我看不到有人在谈论String实习和类初始化:
String的Java源代码文字被拘禁,使得任何 ""与StringUtils.EMPTY该同一对象StringUtils.EMPTY 可以初始化StringUtils类,因为它EMPTY 只有在未声明final静态成员的情况下才访问其静态成员(JLS在该点上是特定的)。但是,由于是 final,因此不会初始化该类。org.apache.commons.lang3.StringUtils.EMPTY 看到一个关于字符串实习相关答案和类初始化,指的是JLS 12.4.1。
StringUtils类的初始化。
我真的不喜欢使用它,因为return "";它比短return StringUtils.EMPTY。
但是,使用它的一个错误好处是,如果键入return " ";而不是return "";,则可能会遇到不同的行为(与是否正确测试空字符串有关)。
"",我讨厌多次键入同一文字字符串,甚至有时仅键入一次。我宁愿在Constants.java中声明常量,但不要在源代码中的任何地方重复它们。
return "";是丑陋的,我PREFER使用回报StringUtil.EMPTY(在我自己的类中声明StringUtil,而不是Apache的StringUtils的)。
如果您的班级没有使用其他任何来自公地的东西,那么只为这个神奇的价值而拥有这种依赖将是很可惜的。
StringUtils的设计人员大量使用了此常量,这是正确的做法,但这并不意味着您也应该使用它。
老实说,我都没有太多使用。如果要比较一个空字符串,只需使用StringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)还会执行nullcheck,因此它与与空字符串进行比较并不完全相同。
null?作为的第二个参数equals,但结果将相同false
isNotEmpty与之相反"".equals(…),因此,将其视为null空字符串与将其与空字符串进行比较是不同的,"".equals("")→ true,"".equals(null)→ false,StringUtils.isNotEmpty("")→ false,StringUtils.isNotEmpty(null)→ false。如果您只是想知道字符串是否为空,请使用string.isEmpty(),如果字符串为空,则返回正确的行为,如果字符串为… true,则抛出aNullPointerExceptionnull
我发现StringUtils.EMPTY在某些情况下有助于提高可读性。特别是:
三元运算符,例如
item.getId() != null ? item.getId() : StringUtils.EMPTY;同样通过使用常量,StringUtils.EMPTY创建对的引用。否则,如果您""每次尝试实例化String文字时,JVM将不得不检查它是否已经存在于String池中(这很可能会存在,因此不会产生额外的实例创建开销)。当然StringUtils.EMPTY可以避免检查字符串池吗?
StringUtils.EMPTY在编译时解析常量。
StringUtil.EMPTY是编译时常量,因此对其的引用将被编译为与""直接使用相同的字节码。而且,我不明白为什么三元运算符应该有所作为。这是任何其他表达方式。使用或不使用命名常量的任何原因同样适用于三元运算符。
不,因为我还有很多要写的。而一个空字符串是plattform独立空(在Java中)。
File.separator 比“ /”或“ \”好。
但是随你便吧。你不会像错字return " ";
someString.isEmpty()。
是的,这很有道理。这可能不是唯一的方法,但是我说这种“没有道理”的方式很少。
在我看来:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.您要将一个空字符串更改为另一个空字符串?
StringUtils.EMPTY。清楚地表明,使用空字符串是有意的,而不是某种懒惰(“哦,这需要一个字符串,让我们通过""”)。如果有人点击了这段代码,在进行更改之前,他会三思而后行。另外,如果StringUtils.EMPTY将其定义为您自己的变量(如)MyClass.EMPTY,则对“空虚的表示”进行更改将需要更改一行代码。例如,您可以将其更改为"<empty>"代替空的String""。但是,我认为这有点太过分了。