黑马程序员技术交流社区

标题: 关于java数组的几个问题,还是不大明白 [打印本页]

作者: chenglove1201    时间: 2014-9-11 13:16
标题: 关于java数组的几个问题,还是不大明白
String str = new String("xy");创建了几个对象?
答案是两个,一个是对象,一个是对象的引用,但不明白那对象的引用到底是什么意思,能否对于这句代码能否详细解释一下,困扰的我厉害,谢谢大家


String str0 ="ab";
String str2 ="abc";
String str6=str0+"c";
System.out.println(str2==str6);对于这段代码,因为有变量所以编译器无法优化,在运行时,会有新的String地址空间的分配,而不是指向缓冲池中所以结果false,对于他的解释,还是不太明白,还望各位能解答一下,谢谢大家

作者: likeermei    时间: 2014-9-11 13:24
内存中分为堆内存和栈内存。
对象引用都在栈内存中,而对象的实体在堆内存中,引用与实体存在着映射的关系,一个实体可以被多个引用所指向,
==比较的是否是同一个对象,equals比较的是两个对象的引用的值是否相等。
作者: 不再青春哥    时间: 2014-9-11 14:17
使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象
作者: 苏乞儿    时间: 2014-9-12 01:31
==比较的是两个字符串的地址哈希值吧,肯定是false了,要是equals的话就可以了。String类复写了Object类的equals的方法,比较的是两个字符串的“值”是否一样,而不在比较哈希值了。
作者: zhuohong_xiao    时间: 2014-9-12 02:40
楼上的OK啦。
作者: zhuohong_xiao    时间: 2014-9-12 02:45
我想说一句。对象的引用不是对象吧。String s;与String s=new String();这俩s含义是不同的吧。
作者: cherry@cookie    时间: 2014-9-12 07:07
发现我也不会
作者: 会飞De石头    时间: 2014-9-12 08:26
每个对象都会有一块存储空间,对象的引用,我个人理解指的是指向对象开辟空间时所开批出来的空间地址值,而不是对象本身
作者: 不系之舟王    时间: 2014-9-12 08:40
我也不会,加油!努力学吧!




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