| 发表于:2007-02-01 16:40:3510楼 得分:0 |
首先我觉得太追究这个东西没什么必要,判断值相等用equal,判断引用地址想等都用==,我想对象比较一般也不会用到==,用到的时候也不会像上面测试那样复杂,没人愿意浪费可读性写那种自己读起来都闹心的程序的。 另外简单说说这个问题。 string有两种生成对象的方法 string= "**** "; string=new string( " "); 另外要明确一点,string虽然是个对象,但是它有很多基本数据类型的特点,所以它是用不可变模式做成的,就是说你不可能通过函数改变一个string本身的情报。当你想要改变的时候,string本身并没有被你改变,他会返回一个新的string对象给你使用。而你想要修改的sting对象本身还是存在并且没有被修改的 当使用string= "**** "的时候,java会把生成的对象作为一个常量保存在常量池中 当使用string= "**** "的时候,java会首先查找常量池中是否已经存在,如果存在则引用指向常量池中对应对象,如果不存在,则生成新的对象保存在常量池中。 当使用形如string= "*** "+ "***** "同上。 正因为string是不可变模式,所以java才可以使用上面的处理,来优化我们的代码,比如减少内存使用 当使用string = new string();系统会无条件开辟新的内存来保存对象。 当使用形如string= " "+str,string=str+ " ",string=str+str,系统都会无条件开辟新的内存来保存对象。 ==比较的是是否使用同一块内存,equal比较的是内存中存放的东西是不是一样的。 以上,应该可以判断出什么时候是true,什么时候是false. | | |
|