==到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals(),并修复了该错误.
是==坏?什么时候应该不应该使用它?有什么不同?
我想澄清一下我是否理解正确:
== - >是参考比较,即两个对象都指向相同的内存位置.equals() - >计算对象中值的比较我的理解是正确的吗?
当我看到equals()方法的实现时,它什么也没做,只是做了什么==.所以我的问题是,当我们有==运营商做同样的工作时,需要将它作为单独的方法吗?
我有一段代码需要我理解:
public static void main(String[] args) {
Character c = new Character('a');
Character cy = new Character('a');
char cx = 'a';
System.out.println(c == cx);
System.out.println(cx == cy);
System.out.println(c == cy);
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
true
false
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么只有第三个陈述失败了.
编辑:这个问题.equals与==原始与对象比较的vs 问题不同.
Scott Ambler在他的书" Java编码标准"中说,我很感兴趣,并引用:
2.5.2在比较的左侧放置常数
所以他建议使用
Run Code Online (Sandbox Code Playgroud)if ( 1 == something ) {…} if ( 0 = x ) { …}代替
Run Code Online (Sandbox Code Playgroud)if ( something == 1 ) {…} if ( x = 0 ) { …}
我的天啊 !!!
他通过这样说来激励这一点:
"虽然它们都是等价的,至少在第一次检查时,左边的代码编译而右边的代码没有."
我知道(当我开始编写Java时,Java 14已经在使用中),这两种情况都会引发编译器错误.
从Ambler语句开始,我试图搜索Java语法if ( x = 0 );是否可编译.
你能帮我解决这个问题吗?我搜索了不同版本的JSR,我没有发现任何可能表明该代码在其他java版本上进行编译的更改.
我使用目标和源1.2编译Jre7编译器仍然会引发编译器错误.不幸的是我没有Java 1.1编译器:9
我的问题是:
if(x = 0); 是否可与旧版Java编译器兼容?
谁能解释这种奇怪的行为String?
这是我的代码:
String s2 = "hello";
String s4 = "hello"+"hello";
String s6 = "hello"+ s2;
System.out.println("hellohello" == s4);
System.out.println("hellohello" == s6);
System.out.println(s4);
System.out.println(s6);
Run Code Online (Sandbox Code Playgroud)
输出是:
true
false
hellohello
hellohello
Run Code Online (Sandbox Code Playgroud) 可能重复:
Java中的字符串比较和字符串实习
我理解String equals()方法是如何工作的,但我对String ==运算符的一些结果感到惊讶.
我希望==比较引用,就像它对其他对象一样.
但是,不同的String对象(具有相同的内容)==返回true,甚至对于静态字符串对象(具有相同的内容),这显然不是相同的内存地址.
我猜= =已被定义为与equals相同以防止其被滥用
我只是试图查看输入的值是否与数组中已有的值匹配,以及它是否返回"有效".我意识到这很简单,但我不能让它工作:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
String[] accountNums = { "5658845", "8080152", "1005231", "4520125", "4562555",
"6545231", "7895122", "5552012", "3852085", "8777541",
"5050552", "7576651", "8451277", "7881200", "1302850",
"1250255", "4581002" };
String newAccount;
String test = "Invalid";
newAccount = keyboard.next();
for (int i = 0; i < accountNums.length; i++)
{
if(newAccount == accountNums[i])
{
test = "Valid";
}
}
System.out.println(test);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助(和耐心)
我对以下代码感到困惑.为什么它与两者==和equals方法相比?
(validFolderRow.getBondTAFolderType() == null || validFolderRow.getBondTAFolderType().equals("null"))
Run Code Online (Sandbox Code Playgroud)
谁能告诉我有什么区别
validFolderRow.getBondTAFolderType() == null
Run Code Online (Sandbox Code Playgroud)
和
validFolderRow.getBondTAFolderType().equals("null")
Run Code Online (Sandbox Code Playgroud)
?