刚才在百度贴吧和某人争了半天。
======================================
我们在入门的时候,都学过
第一种 String a = new String("abc");
第二种 String a = "abc";
当用第一种方式时,==会给出false。
所以我们比较字符串的时候,要用equals.
=======================================
然而,我们又知道,java里有个String池的东西。
所以,当用第二种方式时,==也会给出true
所以在百度贴吧里,某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
========================================
我突然就觉得,和人在争比较字符串该用==还是equals,是不是我疯了
======================================
我们在入门的时候,都学过
第一种 String a = new String("abc");
第二种 String a = "abc";
当用第一种方式时,==会给出false。
所以我们比较字符串的时候,要用equals.
=======================================
然而,我们又知道,java里有个String池的东西。
所以,当用第二种方式时,==也会给出true
所以在百度贴吧里,某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
========================================
我突然就觉得,和人在争比较字符串该用==还是equals,是不是我疯了
软件测试里有句话,软件测试不是为了证明程序无错,而是为了证明软件有错。
同样,我觉得,不应该拿String池来说明==可用,而应该用new String()来说明不可用。
某人说【一般人的习惯是采用第一种方式赋值的,用==更加方便通用点】
万一就有那么个非一般人呢?我觉得某人就不是一般人
================================================================好吧,我就是想你告诉我,你在比较字符串的值时,你是习惯用==还是习惯用equals
================================================================
sun的程序员是**吗?
干嘛花心思重写equals?
==是比较两个字符串所指的对象也就是对象的引用是否是同一个。
equals是单纯的比较连个字符串的对象的值是否相等。
个人认为视情况而定,在需要做什么比较时候,就用什么符号。
String a = "a";
String b = "b";
String ab = "ab";
String s = a+b;
if(s==ab){
System.out.println("true");
}else{
System.out.println("false");
}
}}
结果false
======================
确实没必要再讨论了。
刚才在贴吧有人说了
================================================
关于equalsw我在java核心技术上抄下来。是这样写的
对于s.equals(t)如果字符串s与字符串t相等,则返回true否则就返回 false 。需要注意的是,s与t可以是字符串变量,也可以是字符串常量。例如:
char greeting = "hello";
"hello".equals(greeting);
以上的表达式是合法的
要想检测两个字符串是否相等,而不区分大小写,可以用equalsIgnoreCase()方法
"Hello".equalsIgnoreCase("hello");
一定不能使用 == 运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上,当然,如果字符串放置在同一个位置上,它们必然相等,但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上,
如果虚拟机始终将共同的字符串共享,就可一个使用 == 运算符接侧是否想相等,但实际上只有字符串常量是共享的,而 + 或 substring等操作残生的结果不是共享的,因此,千万不要使用 == 运算符测试两个字符串是否相等。
在java核心技术中文第八版45页看到的。希望对你有所帮助
============================================