文字字符串方法与对象方法
Literal String methods versus Object methods
这两个版本我都看过,所以我只是想知道,这两个表达之间有什么真正的区别吗?常规的写法是什么?
"hello".equals(myString)
myString.equals("hello")
编辑:我的问题的这一部分不是重复的
为什么 "hello".equals(myString)
不抛出错误是件好事?您不希望调用者负责使用空字符串吗?按照这个逻辑,使用 myString.equals("hello")
不会强制执行更清晰的代码吗?
是的,第一个版本永远不会引发 NullPointerException
,如果 myString
是 null
,它将 return false。
最好的方法是第一种,因为它不会抛出异常。
如果 myString
是 null
,第二种方法抛出 NullPointerException
。
Why is it good that "hello".equals(myString) doesn't throw an error? Wouldn't you want the caller to be responsible for using a null string?
您说得对,尽快检测到编程错误是一件好事,所以有时异常是一件好事。如果 myString
不应该是 null
,我会明确地抛出异常,而不是依赖 myString.equals("hello");
抛出异常。例如
public void someMethod(String myString) {
if (myString == null)
throw new NullPointerException();
if ("hello".equals(myString))
// do something
}
此代码完全等同于使用 if (myString.equals("hello"))
,但意图更明确,并且不会有其他程序员出现,没有意识到你为什么不把文字放在第一位,然后交换它.
这两个版本我都看过,所以我只是想知道,这两个表达之间有什么真正的区别吗?常规的写法是什么?
"hello".equals(myString)
myString.equals("hello")
编辑:我的问题的这一部分不是重复的
为什么 "hello".equals(myString)
不抛出错误是件好事?您不希望调用者负责使用空字符串吗?按照这个逻辑,使用 myString.equals("hello")
不会强制执行更清晰的代码吗?
是的,第一个版本永远不会引发 NullPointerException
,如果 myString
是 null
,它将 return false。
最好的方法是第一种,因为它不会抛出异常。
如果 myString
是 null
,第二种方法抛出 NullPointerException
。
Why is it good that "hello".equals(myString) doesn't throw an error? Wouldn't you want the caller to be responsible for using a null string?
您说得对,尽快检测到编程错误是一件好事,所以有时异常是一件好事。如果 myString
不应该是 null
,我会明确地抛出异常,而不是依赖 myString.equals("hello");
抛出异常。例如
public void someMethod(String myString) {
if (myString == null)
throw new NullPointerException();
if ("hello".equals(myString))
// do something
}
此代码完全等同于使用 if (myString.equals("hello"))
,但意图更明确,并且不会有其他程序员出现,没有意识到你为什么不把文字放在第一位,然后交换它.