黑马程序员技术交流社区

标题: String里的一个小题目,求解! [打印本页]

作者: 余银桂    时间: 2012-6-11 12:57
标题: String里的一个小题目,求解!
public class Test {
/**
  * @param args
  */
public static void main(String[] args) {
  String s = null;
     s = s + "world";
     System.out.println("hellow" + s);
     
        }
}




最后的运行结果是: hellownullworld     

  null可以被当成字母打印出来么?

作者: 陈剑华    时间: 2012-6-11 13:08
可以的,如果String对象是null那会在打印的时候,把“null”字母打印出来;

如果你想要打印出来是空的话,要把String s = "";这样初始化,再和其它字符串拼接时,就不会出现"null"这样的字眼了。
作者: 余银桂    时间: 2012-6-11 13:11
陈剑华 发表于 2012-6-11 13:08
可以的,如果String对象是null那会在打印的时候,把“null”字母打印出来;

如果你想要打印出来是空的话, ...

定义那里不是指明了定义为空么...  还是不明白
作者: 姚玉鹏    时间: 2012-6-11 13:26
在使用"+"操作符时,如果有一个操作数是字符串,其他操作数会被转换成字符串  类似 1+“”=“1”   null+“ world“=nullworld
作者: 付信榕    时间: 2012-6-11 13:34
图为String s= null;和String s1=" ";的区别,希望对理解有帮助

未命名.PNG (13.4 KB, 下载次数: 48)

未命名.PNG

作者: 陈剑华    时间: 2012-6-11 13:43
这就关系到java语言的设计了,为了区分""空字符串和null,
当String对象是null时,
String str = null;
str.trim();//像这样就会抛空指针
而:
String str1 = "";
str1.trim();//这里就不会

str,str1都会栈上保存一个地址,指向内存堆中的某个空间,这个空间保存的是它们各自的实际值。
这里,str1是一个空字符串的对象,里面存放着"";
而,str这个地址是没有明确指向的,它哪也不指,其内容为0x00000000

试想一下,如果null和""输出的结果都是"",当代码量一大,那就会在出错的时候很难调错,因为它们在输出时候的效果是一样的,我想就是出于这样的考虑,java的设计者才会,让jvm在碰到null输出或字符拼接时,给上"null"字样,便于开发,和调错.




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