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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mrwise1991 中级黑马   /  2014-1-14 18:52  /  1469 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="    ";
String s="";
String s=null;
谁能详细的说说这几个声明的区别吗?

评分

参与人数 1黑马币 +1 收起 理由
黄晓鑫 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
String s ="   ";是一个对象 String s = ""又是另外一个对象 String s = null给对象初始化值
回复 使用道具 举报
黄晓鑫 发表于 2014-1-14 19:14
String s ="   ";是一个对象 String s = ""又是另外一个对象 String s = null给对象初始化值 ...

这个回复有点神啊,不过欢迎捧场,呵呵
回复 使用道具 举报
呵呵 本来就是这样
回复 使用道具 举报
注意区分 :
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黑马币 +3 收起 理由
黄晓鑫 + 3 很给力!

查看全部评分

回复 使用道具 举报 1 0
String s = " "; 及String s1 = "";都会在内存中开辟空间,如下:

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


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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 版主请假归来,现在加分!

查看全部评分

回复 使用道具 举报
你长度为null怎么可以调用length
回复 使用道具 举报
贺利英 发表于 2014-1-14 19:39
注意区分 :
String s="    ";表示此字符串是由空格组成的,在内存中分配了空间。
String s="";    表示此 ...

null不是表示没有给s3赋对象的引用吗?不是很理解
回复 使用道具 举报
mrwise1991 发表于 2014-1-14 23:09
null不是表示没有给s3赋对象的引用吗?不是很理解

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

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 版主请假归来,现在加分!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马