Java中的空字符串的判断

whilliy 2005-05-24 11:52:35
一直用.NET现在被迫拿起Java,想问一下在Java中准确判断一个字符串的方法:
比方说str是一个String对象
if(str!=null&&!str.equals("")可以吗?
if(str!=null&&str!="")呢?
判断str的内容是否为"0"呢?
if(str=="0")还是if(str.equals("0"))呢?他们有什么区别呢?
...全文
579 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumingwangzi 2005-05-25
  • 打赏
  • 举报
回复
字符串的比较还是用equals,==对String来说是比较对象的,包括引用
humanity 2005-05-25
  • 打赏
  • 举报
回复
补充,String 的副本 ( 句柄不同 ) , equals 总是相等的,但是 a== b 总是 false.
上面所说的 “不行”就是说 false.
humanity 2005-05-25
  • 打赏
  • 举报
回复
Java 中 a == b 比较的是句柄。 equals 默认(继承自 Object) 也是比较句柄,但是 String 类覆写了 public boolean equals(Object o) 方法, 使他们比较字符串中每一个字符。

String a ="string";
String b="string";
// 如果这两个右边是一模一样,那么他们就可以 用 a == b 判断,

String c = new String("string"); // a==c ? 不行。 c 是 "string" 的一个副本,句柄不同。

Java 中 JVM 对 String 的处理:
对于常量串 :"string" 这样的,每当你 String a="string" ; String b="string" ;的时候 ,JVM 都会搜索一下 字符串常量列表,看看有没有已存在的,如果找到一个完全相等的,就会返回句柄给 a 和 b,
如果没有找到,新建一个并返回句柄。也就是说 a 和 b 肯定是同一个东西。
对于String c=new String("string") ; String d="string".trim(); 你得到的都是副本。

你可以对你想到的每种情况使用 :
System.out.print("a="+ System.identityHashcode(a));
System.out.print("b="+ System.identityHashcode(b));
System.out.print("c="+ System.identityHashcode(c));

看看他们是不是一样的,如果是就 a==b 为 true 。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧