本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:String.equals
和==
有什么区别?
下面这段代码我使用==
判断两个字符串是否相同,但结果为何是false
呢?
public static void main(String...aArguments) throws IOException {
String usuario = "Jorman";
String password = "14988611";
String strDatos = "Jorman 14988611";
StringTokenizer tokens = new StringTokenizer(strDatos, " ");
int nDatos = tokens.countTokens();
String[] datos = new String[nDatos];
int i = 0;
while (tokens.hasMoreTokens()) {
String str = tokens.nextToken();
datos[i] = str;
i++;
}
//System.out.println (usuario);
if ((datos[0] == usuario)) {
System.out.println("WORKING");
}
}
复制代码
回答一
使用
String.equals(Object other)
方法比较字符串,而不是使用==
运算符。
equals()
方法检查字符串的实际内容,==
运算符检查对象的引用是否相等。要注意字符串常量的内存地址通常是相同的,这两个具有相同值的常量实际上可以用==
进行比较,但最好不要依赖于此
if (usuario.equals(datos[0])) {
...
}
复制代码
注意:比较的主体是usuario
,因为这个值是非空的,但是你仍然需要检查一下datos
数组是否一定包含元素,否则你将得到一个数组越界异常。
回答二
equals()
函数是Object
类的方法,每个类都能重写它。String
类重写了这个方法用来检查字符串是否相等,即在内容上而非在引用上相等。
==
运算符检查两个对象的引用是否相同。
观察下面的代码:
String abc = "Awesome" ;
String xyz = abc;
if(abc == xyz)
System.out.println("Refers to same string");
复制代码
这里的变量abc
、xyz
都是指同一个字符串Awesome
,因此表达式abc==xyz
为真。
String abc = "Hello World";
String xyz = "Hello World";
if(abc == xyz)
System.out.println("Refers to same string");
else
System.out.println("Refers to different strings");
if(abc.equals(xyz))
System.out.prinln("Contents of both strings are same");
else
System.out.prinln("Contents of strings are different");
复制代码
这里的abc
和xyz
是两个不同的字符串,虽然内容是相同的Hello World
。因此这里的表达式(abc==xyz)
为false
,而abc.equals(xyz)
为true
,希望你理解==
和<Object>.equals()
之间的区别。
文章翻译自Stack Overflow:stackoverflow.com/questions/7…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END