当前位置: 首页 > 面试题库 >

在字符串文字上调用equals

柯宜年
2023-03-14
问题内容

我只是在整理我的代码而已,这是一段:

String saving = getValue();
if(saving != null && saving.equals("true")){
   // do something
}

然后我想到了另一种方法来摆脱检查null

if("true".equals(saving)){
   // do something
}

绝对可以,但是 这样安全 吗?我的意思是字符串文字存储在公共池中,而字符串对象create by
new在堆上。但是常量池中的字符串也是对象,对吗?

但是,尽管它使代码更短,但这似乎仍然不是正确的选择。


问题答案:

这是安全的-并且如您所见,这是避免空指针的一种好方法。

您提到了newfor字符串的使用。许多Java静态代码分析工具会建议始终使用文字new String("foo");

编辑:

如果您愿意,甚至可以使用:

if (Boolean.valueOf(saving)) {
    ...
}

根据文档,通过null将返回false



 类似资料:
  • 问题内容: 我看到很多这样的旧代码: 我看不到使用intern()的任何原因,因为在Javadoc中可以看到:“所有文字字符串和字符串值常量表达式都被插入。” 是否有此意图,也许是在该语言的过去版本中? 问题答案: 这是一种确保实际上不是常数的技术。 当Java编译器看到对最终静态基元或String的引用时,它将该常量的实际值插入使用它的类中。如果您随后在定义类中更改常量值,但不重新编译using

  • 问题内容: 在我的应用程序中,我将经常传递对静态字符串的引用。我希望避免让Go为每个调用分配内存,但是我无法将地址获取到字符串文字。 为什么不能采用字符串文字的地址(请参见下面的示例)?我是否误解了语法,还是由于Go的内部运作而受到限制? 如果不可能的话,最好的解决方案是什么? 可以,但是每次都会分配内存吗? 不会分配任何新的内存,但我希望避免该函数之外的混乱情况。 感谢帮助! 问题答案: 接受文

  • 当我有一个字符串需要将一个字符连接到它的结尾时,我应该更喜欢超过是否有任何性能原因? 我知道数组字符串连接和字符串生成器,我并不是在询问一般情况下如何连接字符串的建议。 我也知道有些人会有冲动向我解释过早的优化,而且一般来说我不应该为这些小事情费心,请不要... 我之所以问这个问题,是因为从编码风格的偏好来看,我更倾向于使用后一个,但我觉得第一个应该表现得稍微好一点,因为知道所附加的只是一个字符,

  • 问题 你想在字节字符串上执行普通的文本操作(比如移除,搜索和替换)。 解决方案 字节字符串同样也支持大部分和文本字符串一样的内置操作。比如: >>> data = b'Hello World' >>> data[0:5] b'Hello' >>> data.startswith(b'Hello') True >>> data.split() [b'Hello', b'World'] >>> dat

  • 当我们使用 String 文字创建字符串对象时,会调用字符串类的哪个构造函数。 示例: 在这种情况下,string类的哪个构造函数get?

  • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s