黑马程序员技术交流社区

标题: 字符串与null [打印本页]

作者: 不愿一人    时间: 2013-12-29 12:16
标题: 字符串与null
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                
  4.                 String str = null;
  5.                 //System.out.println(str.length());
  6.                 String str1 = str + null;
  7.                 System.out.println(str1.length());
  8.                
  9.         }

  10. }
复制代码
第一次打印时出现异常这个我可以理解,
但是第二次打印时为什么是8啊,网上查资料也搞不懂,
null不是空吗,什么都没有啊,如果能打印也应该是0啊,还有这句话为什么不报异常啊,
null值相加结果是什么,哪位同学能帮我解释一下



作者: zzmxhm    时间: 2013-12-29 12:52
本帖最后由 zzmxhm 于 2013-12-29 12:54 编辑

当 null 和字符串相加时会被当作 "null" 来处理,可以试一下以下几个语句:
  1. String str1 = "abc";
  2. String str2 = null;
  3. System.out.println(str1 + str2);   // "abcnull"
  4. System.out.println("abc" + str2);   // "abcnull"
  5. System.out.println(str1 + null);   // "abcnull"
  6. System.out.println("abc" + null);   // "abcnull"
  7. System.out.println(str2 + null);   // "nullnull"
  8. System.out.println(str2 + str2);   // "nullnull"

  9. System.out.println(null + null);   // 编译不通过
复制代码

这也是用+连接字符串和用 String.cancat(String str) 的区别之一:+ 可以连接一个 null 值而 cancat 会抛出 NullPointerException
作者: yekong262    时间: 2013-12-29 17:47
请问 您是怎么把这个代码像你上面那样发出来的???
  谢谢~!
作者: 杨丽静    时间: 2013-12-30 23:38
public class KK {         public static void main(String[] args)          {                 String str = null;             //System.out.println(str.length());             String str1 = str + null;             System.out.println(str1.toString());                                   } }这样程序运行的结果为nullnull所以长度为8吧   我也不知道具体怎莫解释
作者: Zenith    时间: 2013-12-30 23:54
这里用String 接受  所以 null也就是一个字符串对象了   那么+号 应该是连接符   str+null   也就是null+null   属于字符串的连接,你用断点试试  就可以看见是两个null值 做的连接了    所以长度自然是字符串的长度了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2