Java中的空字符串与空字符串
我在一些链接上读到过,返回空字符串比返回空字符串更好,因为它消除了Java中的空字符串与空字符串,java,string,Java,String,我在一些链接上读到过,返回空字符串比返回空字符串更好,因为它消除了空点异常的可能性 但是,如果我们从内存的角度考虑,我认为空字符串确实占用了一些堆空间,毕竟它是一个对象,尽管是空的。因此,考虑到返回null不比返回空字符串好吗?对于collection来说也是一样的,比如说ArrayList?有时候你想返回null,有时候你不想。这实际上取决于你的逻辑 例如,考虑一种情况,其中一个空字符串表示一个合法的返回值。在这种情况下,如果在构造某个对象时遇到逻辑错误,则不希望返回空字符串,因为它在您的情况
空点异常的可能性
但是,如果我们从内存的角度考虑,我认为空字符串确实占用了一些堆空间,毕竟它是一个对象,尽管是空的。因此,考虑到返回null不比返回空字符串好吗?对于collection来说也是一样的,比如说ArrayList
?有时候你想返回null
,有时候你不想。这实际上取决于你的逻辑
例如,考虑一种情况,其中一个空字符串表示一个合法的返回值。在这种情况下,如果在构造某个对象时遇到逻辑错误,则不希望返回空字符串,因为它在您的情况下是合法的返回值,因此您可能希望返回null
,以指示存在某种错误
例如,考虑得到这个数组:<代码> [ DOG1 ],“DOG2”,“CAT”,“”,“”/Cord>,并且您要编写一个在数组中搜索字符串的方法:
private String getDog(String dog) {
for(String str : animals) {
if(str.equals(dog)) {
return dog;
}
}
return null;
//If you return an empty String instead
//it's already a valid member in that array...
//it won't be an indication that the String doesn't exist
}
有时您希望返回null
,有时您不希望返回。这实际上取决于你的逻辑
例如,考虑一种情况,其中一个空字符串表示一个合法的返回值。在这种情况下,如果在构造某个对象时遇到逻辑错误,则不希望返回空字符串,因为它在您的情况下是合法的返回值,因此您可能希望返回null
,以指示存在某种错误
例如,考虑得到这个数组:<代码> [ DOG1 ],“DOG2”,“CAT”,“”,“”/Cord>,并且您要编写一个在数组中搜索字符串的方法:
private String getDog(String dog) {
for(String str : animals) {
if(str.equals(dog)) {
return dog;
}
}
return null;
//If you return an empty String instead
//it's already a valid member in that array...
//it won't be an indication that the String doesn't exist
}
在null
宗教战争中,我自己并不认为null
与其他选择相比是不好的做法,但有些人确实如此。在担心性能之前,我肯定会首先考虑什么样的设计和API是有意义的
也就是说,我不认为记忆是个问题<代码>“
将被intern
ed,并且堆上只有一个从使用return”“
的方法返回的”
实例
我也不认为返回一个非
null
引用要快得多。。在担心性能之前,我肯定会首先考虑什么样的设计和API是有意义的
也就是说,我不认为记忆是个问题<代码>“将被intern
ed,并且堆上只有一个从使用return”“
的方法返回的”
实例
我也不相信返回非
null
引用的速度会快到无穷多。我不会说返回null总是坏事,但我个人倾向于避免它
如果可用,我们通常使用可选的。(来自或)
因此,在您的情况下,您要么返回包含某些值的
Optional
,要么返回Optional.缺席()
如果可用,我们通常使用可选的。(来自或)
因此,在您的例子中,您可以返回包含一些值的可选的,或者返回可选的.缺席()
答案取决于。空的字符串
对象基本上是字符[0]
和int
。如果你认为这是一个很大的堆空间,那么…好吧。但我从未见过有人这样做。@sᴜʀᴇsʜᴀᴛᴛᴀ 这可能要视情况而定,但我对null
有偏见:)@是的。空字符串有时会引起痛苦:P.return“”代码>在多个位置不会浪费堆内存!在Java中,字符串是不可变的,这给了Java编译器很大的优化空间。由字符串文字创建的字符串(如“xyz”
,而不是新字符串(“…”
)在字符串文字池中得到优化,字符串文字池中将不会有重复的字符串!答案取决于。空的字符串
对象基本上是char[0]
和int
。如果你认为这是一个很大的堆空间,那么…好吧。但我从未见过有人这样做。@sᴜʀᴇsʜᴀᴛᴛᴀ 这可能要视情况而定,但我对null
有偏见:)@是的。空字符串有时会引起痛苦:P.return“”代码>在多个位置不会浪费堆内存!在Java中,字符串是不可变的,这给了Java编译器很大的优化空间。由字符串文字创建的字符串(如“xyz”
,而不是新字符串(“…”
)在字符串文字池中得到优化,字符串文字池中将不会有重复的字符串!