A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁健 黑马帝   /  2011-12-9 21:26  /  2921 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 l梁键 于 2011-12-10 10:25 编辑

在JAVA中,如果判断一个String实例是否为空,一般用如下来判断:
String a;
if((a==null) || (a.trim().equals("")))

为什么用equals方法?
好像不会用a.trim() == "" 这个条件来代替第二个条件。
请问这是为什么?

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

6 个回复

倒序浏览
trim
public String trim()返回字符串的副本,忽略前导空白和尾部空白。
如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。

否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的新 String 对象。

否则,假定 k 为字符串中代码大于 '\u0020' 的第一个字符的索引,m 为字符串中代码大于 '\u0020' 的最后一个字符的索引。创建一个新的 String 对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,即 this.substring(k, m+1) 的结果。

此方法可用于截去字符串开头和末尾的空白(如上所述)。


返回:
此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。


这是在javase api上对这个方法的解释,这个方法返回的是一个对象,如果比较的话就需要比较引用了,所以要用equals()比较,而不能用==比较

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
判断字符串内容是否相同的话,都是用equals方法, 跟""比较的话更是只能用equals方法。
==是判断两个对象是否相同,不是判断值是否相同。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
t_mac 黑马帝 2011-12-9 22:15:43
板凳
String实例是为空有两种情况
一种情况 该对象不存在 该对象的引用为空 即 a==null;
另一种情况  该对象的引用指向的字符串对象为空  即为空字符串 a.trim().equals("") 的意思是把该字符串两边的空格都去掉后调用字符串equals方法
看看是不是equals “” ,而==比较的是对象的引用这里不需要。
回复 使用道具 举报
String类复写了Object里边的equals方法,判断字符串是否相等,==比较的是对象,字符串为空有可能是字符串指向null,还有可能是是全为空格,无内容,所以用a.trim().equals("")来判断第二种情况,不能用==。
回复 使用道具 举报
对不起楼主    我那个写差了  因为学String还是好久的事呢   有些忘了     才看了看笔记   写差了'


如果:
string s1=new String("Hello");
string s2=new String("Hello");
则(s1==s2)=false

如果:
string s1="Hello";
string s2="Hello";
则(s1==s2)=true;
因为他们指向的同一个对象。

如果把其他变量的值赋给s1和s2,即使内容相同,由于不是指向同一个对象,也会返回false。所以建议使用equals(),因为equals比较的才是真正的内容

点评

对,这个符合问题  发表于 2011-12-9 23:34
回复 使用道具 举报
赵燕燕 黑马帝 2011-12-9 23:11:31
7#
看下这个例子可能就理解了。
String s1=" ";
String s2="  ";
System.out.println(s1.equals(s2)); //false
System.out.println(s1.trim().equals(s2.trim()));//true. 因为equals方法比较的是引用所指向的对象中的内容。s1,s2调用trim方法后,得到的内容是相同。
System.out.println(s1.trim()==s2.trim());//false. 因为==比较的是引用变量的值,即所指向对象的地址。调用trim方法后对象的地址是不会改变的。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马