本帖最后由 vigiking 于 2013-5-2 23:27 编辑
- String a="abc";//它只 在堆中创建一个对String类的对象引用对象a,然后查找栈中是否有String类型的对象"abc",若没有则将"abc"存放进栈,并令a指向"abc",若已经存在则直接令a指向"abc".
复制代码- StringBuffer c=new StringBuffer("abc");//所有通过new操作符的操作都是在堆完成的,它创建两个对象StringBuffer类型 对象”abc“和StringBuffer类型引用对象 c,然后查找栈内存中是否有StringBuffer类型的对象“abc”,如果有则直接将c指向栈中的对象"abc",如果没有则将对象“abc”压入栈中
复制代码- String e=new String("abc"); //在堆内存创建
- String类型对象abc和String类型的引用对象e然后查找栈内存中是否有String类型对象“abc”,如果有则直接将e指向栈中的对象"abc",如果没有则将对象“abc”压入栈中[
复制代码 equals()方法在基本类型里是比较值 在引用类型里是比较地址(即比较这两个引用是否引用的是同一个对象)
所以①a.equals(c)//a指向栈内存中String类型的对象“abc”,c指向栈内存中StringBuffer类型的对象”abc“,所以a和c引用的不是同一个对象故返回false;
②a.equals(e)//a指向栈内存中String类型的对象“abc”,e指向堆内存中的String类型的“abc”二者引用的是同一个String类型的对象故返回所以返回的是true
|