java中创建一个String对象的问题

[复制链接]
查看11 | 回复3 | 2009-9-6 12:20:12 | 显示全部楼层 |阅读模式
后者是对象的比较。可以通过equals来比较。是因为String类重写了Object的equals方法。没有重写时,即Object的equals方法就是“==”,重写后只比较有意义的量,对于String来说,就是String的赋值。 用“==”比较两个对象时是比较的两个引用变量的位模式。即物理地址。除非你令b=a;让两个引用变量指向同一个对象,“==”才成立。否则两个对象“==”一定不成立。
回复

使用道具 举报

千问 | 2009-9-6 12:20:12 | 显示全部楼层
因为使用new创建的是对象,对象是否相同不只是看内容是否相同,通过new创建的对象a,b一样可以使用==比较,只是ab肯定是不同的,所以返回的一定是false,但是直接赋值,就不一样了,不管使用==还是equals都只是比较内容,而不是比较对象,这样,返回的都是true。
回复

使用道具 举报

千问 | 2009-9-6 12:20:12 | 显示全部楼层
首先给你个提示,String a = new String("aaa");String b = new String("aaa");也可以用== 比较,但是比较结果是 falseequals 是比较hashCode值==是比较内存地址值String a="aaa";String b="aaa";你认为创建了几个对象 ,是1个对象。a b都是指向一个地址的指针String a = new String("aaa");String b = new String("aaa");创建了2个对象在堆里。 来看下结果:public class Main {static public void main(String[] fff){ Object a="aaa"; Object b="aaa";Object c=new String("aaa"); Object d=new String("aaa");System.out.println(a==b); System.out.println(c==d); System.out.println(a==d); System.out.println(""+a.equals(b)); System.out.println(""+c.equals(d)); System.out.println(""+a.equals(d));System.out.println(a.hashCode()); System.out.println(b.hashCode()); System.out.println(c.hashCode()); System.out.println(d.hashCode());}}truefalsefalse true true true96321963219632196321
回复

使用道具 举报

千问 | 2009-9-6 12:20:12 | 显示全部楼层
谁说只能通过euqlas比较,也一样可以用"=="比较,只是结果不一样.equals在字符串中是比较内容,而"=="是比较内存地址.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行