feng

飘逸~~~~~life

java中奇怪的null

项目开发测试中发现一个问题,后来发现是null在作怪,看看这个程序
public class Feng {
 public static void main(String[] args) {
  Feng feng=null;
  String f=null;
  String a=""+feng;
  String b=""+f;
  System.out.println(a);
  System.out.println(b);
  
  if(a.equals("null")){
   System.out.println("怎么回事");
  }
  if(b.equals("null")){
   System.out.println("怎么变出来的");
  }
 }

}

大家可以运行一下,结果是

null
null
怎么回事
怎么变出来的
很奇怪吧? 也就是不管是一个普通对象的null还是一个String对象的null  ,如果进行""+null这样的操作的话
都变成了一个"null"字符串,大家记住吧,开发中考虑这个问题,省得实际项目出错,知道为什么的,可以解释一下,xiexie!

posted on 2008-08-29 11:18 feng 阅读(2571) 评论(8)  编辑  收藏

Feedback

# re: java中奇怪的null 2008-08-29 11:41 隔叶黄莺

普通对象的 null 还是 String 对象的 null,它们都是 null,都一样的

String a=""+feng; JVM 执行的是 StringBuilder.append(Object)
String b=""+f; JVM 执行的是 StringBuilder.append(String)

这时候你就要看这两个方法的实例了:
1. public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}

  而在 String.valueOf(Object) 中是
return (obj == null) ? "null" : obj.toString();

2. StringBuilder append(Object obj) { 中的实现是
if (str == null) str = "null";

看到这些够明白了吧,也就不应该觉得奇怪。既然 JDK 有源码,碰到问题细究一下就简单了,光抓头发是找不到答案的。

另外是 StringBuffer 还是 StringBuilder 看你用的是什么 JDK 版本,JDK 1.4 是 StringBuffer,它们的差别类似于 HashMap 和 Hashtable 的差别。

  回复  更多评论   

# re: java中奇怪的null 2008-08-29 11:48 feng

楼上的给出解答了 谢谢 我平时其实从来不看源代码,我很懒的   回复  更多评论   

# re: java中奇怪的null[未登录] 2008-08-29 14:33 Matthew

好像初学的时候就知道了,不过现在回过头来看这个类似操作符重载的功能,感觉太另类了。  回复  更多评论   

# re: java中奇怪的null 2008-08-30 14:03 ci

..........  回复  更多评论   

# re: java中奇怪的null 2008-09-01 10:22 塔塔

看来看源码还是非常重要的啊,我很少去看,好像没那个习惯.  回复  更多评论   

# re: java中奇怪的null 2008-10-22 16:18 blue_sky

从来没有看过源码哎,看来还是不行啊啊。。  回复  更多评论   

# re: java中奇怪的null 2009-02-03 01:41 wo654654

tyhftghut jyh  回复  更多评论   

# re: java中奇怪的null 2009-02-21 21:21 acssccc

立刻的 咖啡碱内就风疹块机   回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航: