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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不愿一人 中级黑马   /  2013-12-29 12:16  /  1395 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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值相加结果是什么,哪位同学能帮我解释一下


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

4 个回复

倒序浏览
本帖最后由 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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
请问 您是怎么把这个代码像你上面那样发出来的???
  谢谢~!
回复 使用道具 举报
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吧   我也不知道具体怎莫解释
回复 使用道具 举报
这里用String 接受  所以 null也就是一个字符串对象了   那么+号 应该是连接符   str+null   也就是null+null   属于字符串的连接,你用断点试试  就可以看见是两个null值 做的连接了    所以长度自然是字符串的长度了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马