我在大学的一门Java课程中被告知,我永远不应该将Java字符串与==
运算符进行比较,因为它检查两个字符串是否是同一个对象,而不是检查它们是否具有相同的字符。
但是,在考试当天,呈现给我的是以下代码:
java prettyprint-override">if ("String".toString() == "String")
System.out.println("The same");
else
System.out.println("Not the same");
我以为结果会“不一样”,因为“string”.toString()
和“string”
不是同一个对象。
如果查看String
的ToString()
,您将看到它返回this
(即执行它的同一String
实例):
/**
* This object (which is already a string!) is itself returned.
*
* @return the string itself.
*/
public String toString() {
return this;
}
因此
"String".toString() == "String"
相当于
"String" == "String"
问题内容: 我有以下几行代码来比较String。str1不等于str2,这是可以理解的,因为它比较对象引用。但是,为什么s1等于s2? 输出: 问题答案: 字符串常量池实际上将缓存所有字符串文字,因此它们是下面的同一对象,这就是为什么你看到要执行输出的原因。本质上,这是对VM的一种优化,可以避免每次声明文字时都创建新的字符串对象,这可能会很快变得非常昂贵!在你的示例中,你明确地告诉VM创建新的字符
问题内容: 我在何时遇到oracle的问题。 该查询始终返回null,尽管很明显结果应该是第一种情况。我是否缺少有关oracle中字符串比较的内容? 问题答案: 您要再次检查字符串和一个空字符串,从而出现问题;在Oracle中,您最好检查一下您的字符串: 关于Oracle处理空字符串和空值的方式,在这里您可以找到更多信息 一个例子: 给出: 简而言之,谈论时,您可以依靠的唯一支票是:
我是java编程的新手。而且我不明白为什么string对象在Java中是不可变的。
问题内容: 我最近注意到,有一些Java库(JDK,joda time,iText)在编译时没有部分/全部调试信息。要么缺少局部变量信息,要么缺少局部变量信息和行号。 有什么理由吗?我意识到这会使编译后的代码更大,但我认为这不是一个特别大的考虑因素。还是仅使用默认的编译选项进行构建? 谢谢。 问题答案: 默认的编译选项不包含调试信息,您必须明确告诉编译器包括调试信息。大多数人忽略它的原因有几个:
问题内容: 检查数组arr1是否包含与arr2相同的元素,并且在Java中的顺序相同。 例如: 到目前为止,我有 问题在于它只比较两个数组的第一个元素。 问题答案: 您正在迭代直到找到匹配项。相反,您应该寻找不匹配的字符串,并且应该使用 not 仅供参考,这也是Arrays.equals在处理值时所做的事情。
问题内容: 我正在尝试将来自HTML文本字段的值与整数进行比较。它按预期工作。条件是- 文本字段的值在哪里。只要值介于1-999(含)之间,条件就会返回,否则返回。问题是,来自文本字段的值是字符串类型,我正在将其与整数类型进行比较。可以进行这种比较,还是应该使用parseInt()转换为整数? 问题答案: 因为JavaScript 以允许它们将操作数强制转换为不同类型的方式定义和(以及其他几个运算