null之鉴

http://wenku.baidu.com/view/73447d4efe4733687e21aa58.html

(1)、String abc=null;    创建一个空字符串对象

(2)、String abc="";        创建一个字符串为空的字符串对象

(3)、String adc;        声明一个字符串对象,但没有分配内存,而1、2已经分配了内存对于(3),不能if(abc==null),或者 int  length=abc.length();

1) String abc=null;

2) String abc;

3) String a="";

4) String b="";

5) String c=new String("");

6) String d=new String("");

1)等于2),java不允许一个悬挂引用,没有赋值的引用地址一律自动赋值为null,以防止访问到任意内存;

3)和4)中,变量a和b将会指向同一内存地址

5)和6)中,变量c和d不会指向同一地址,而且两个""内容的地址,并且和a,b不同,实际上,3)和4)相当于new String("").intern();

String类维护着一个字符串流,对于像3)和4)这样的赋值方法,String会在这个池中查找字符串是否已经在池中,如果在,就直接指向该地址。

如果不在,生成一个实例放入池中再指向那个地址,可见对于同样内容的字符串多次引用时3)、4)的方法要比5)、6)的方法剩内存。

String是一个内容不可变的量,运用的设计模式GOF。

得出的结论:

在成员变量的定一种,String s;等同于String s=null;

在本地变量(方法变量)的定义中,String s不等同于String s=null;这时要使用s必须显示的赋值。

只要是在方法中定义变量都要显示赋初值,main()方法也不例外,而在方法之外编译器会自动赋初值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值