黑马程序员技术交流社区

标题: 关于String类的直接引用问题 [打印本页]

作者: mrwise1991    时间: 2014-1-14 18:52
标题: 关于String类的直接引用问题
String s="    ";
String s="";
String s=null;
谁能详细的说说这几个声明的区别吗?
作者: 黄晓鑫    时间: 2014-1-14 19:14
String s ="   ";是一个对象 String s = ""又是另外一个对象 String s = null给对象初始化值
作者: mrwise1991    时间: 2014-1-14 19:21
黄晓鑫 发表于 2014-1-14 19:14
String s ="   ";是一个对象 String s = ""又是另外一个对象 String s = null给对象初始化值 ...

这个回复有点神啊,不过欢迎捧场,呵呵
作者: 黄晓鑫    时间: 2014-1-14 19:22
呵呵 本来就是这样
作者: 贺利英    时间: 2014-1-14 19:39
注意区分 :
String s="    ";表示此字符串是由空格组成的,在内存中分配了空间。
String s="";    表示此字符串是空字符串,在内存中分配了空间。
String s=null;表示此字符串变量的值为null,初始化值为null,在内存中也分配对应的空间的。
程序如下:
class StringDemo
{
        public static void main(String[] args)
        {
                String s1="";
                String s2="  ";
                String s3=null;

                System.out.println("s1="+s1);
                System.out.println("s2="+s2);
                System.out.println("s2="+s2+"s3="+s3);
                System.out.println("s1="+s1+"s3="+s3);
               

        }
}
结果可自己进行验证的。

作者: 灰太狼爱平底锅1    时间: 2014-1-14 20:21
String s = " "; 及String s1 = "";都会在内存中开辟空间,如下:

但当定义String s2 = null;并输出其长度时,如下:


这会报出空指针异常,区别就在于此。

作者: 黄晓鑫    时间: 2014-1-14 22:59
你长度为null怎么可以调用length
作者: mrwise1991    时间: 2014-1-14 23:09
贺利英 发表于 2014-1-14 19:39
注意区分 :
String s="    ";表示此字符串是由空格组成的,在内存中分配了空间。
String s="";    表示此 ...

null不是表示没有给s3赋对象的引用吗?不是很理解
作者: 高亮亮    时间: 2014-1-14 23:33
mrwise1991 发表于 2014-1-14 23:09
null不是表示没有给s3赋对象的引用吗?不是很理解

null是一个引用类型常量,不是没有引用.是引用了一个叫null的空引用常量.
作者: quan23355    时间: 2014-1-15 15:33
这里要搞清楚两个概念,一个是引用变量,还有就是引用变量所指向的对象。这两者一个是在栈内存中开辟空间,一个是在堆内存中开辟空间。对于String=null表示在栈内存中开辟了一个引用变量,指向堆内存中的对象为空,也就是没有指向任何对象。对于String s=" "表示s直接引用常量池中的一个空格字符串对象,长度为1,String s=""表示s直接引用常量池中的一个空白字符串对象,长度为0。




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