String_shod be so difficiult

闲话少说,先看程序吧:

 

反正我是没预料到结果,暂时还解释不了,先在此发表了,不知有谁能猜对答案:

结果如下:

D:/java_pro_jdk>java StringTest
false
--------------
false
----------------
true
-----------------------
true
-------------------
false
-----------------
true

求解释啊...等一段时间吧....

时间:  2011-05-1120:14:52

现在开始先解释一谢谢吧:

 首先:new 了两个Object类对象,返回两个不同地址,则明天object和object2的对象地址不同---返回false;

第二个,同样是new了两个String类对象,返回两个不同地址,同上----返回false;

第三个,在java中,所有字符串对象均作为String类的对象,首先"bbb"是一个对象,即str3和str4均是指向"bbb"对象

的应用,则地址是相同的-----返回true;

第四个,str5是new出来的,指向的肯定不是"ccc"的地址,而str6是指向"ccc"的引用,两个地址不一样---返回false;

第五个,(暂时的理解)s是指向的"hello"对象的引用,s1是指向"hel"对象的引用,s2是指向"lo"对象的引用,三个均是地址,

基本可以认为s不会那么巧的等于另外两个地址相加的和----返回false;

第六个,(暂时的理解)"hel" + "lo" 是先将两个字符串组合以后再生成"hello"对象,因为hello在javapool中已存在,则将javapool中

的hello对象的地址返回,因为s是有字符字面值产生的,不是new出来的,则即也指向javapool中的hello对象,所以返回----true;

 

可以预测:若s是通过new出来的,即String s = new String("hello"); 则s指向的是在堆中创建的"hello"对象,则s == "hello"为false,

s== "hel" +"lo"为false; 实验结果验证我的预测是正确的,嘻嘻嘻....

小结: 当str对象是通过字面值产生时,先到String类维护的stringpool中查看是否已有该对象,例如:String str = "ccc";

先到stringpool中查看"ccc"是否已存在,(1) 若已经存在,则返回该对象的地址,即str指向"ccc";(2)  若不存在,则在javapool中创建"ccc"然后

将"ccc"对象的地址返回。                         当str对象时通过new方法产生时: 例如: String str = new String("ccc"); 同样的,先到

stringpool中产看是否已存在:(1)不存在,在javapool中创建,然后到heap堆中创建"ccc"对象,返回在heap堆中创建的那个对象的

地址; (2)已存在,直接到heap堆中创建"ccc"对象,返回heap堆中对象的地址 。 无论如何,new()方法都是在返回heap堆中的那个地址。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值