String类型在Java中对象的比较的内存中的运行情况

[复制链接]
查看11 | 回复1 | 2009-12-7 21:59:37 | 显示全部楼层 |阅读模式
这里涉及到java内存分配的问题首先你要知道"1"是字符串常量是存放在数据段的,或者叫常量池当程序中出现"1"时虚拟机就去内存里找有没有现成的"1",有就不创建了所以s1,s2指向的是同一内存空间equals()的默认实现就是==,==比较的是对象的hashcode,可以简单理解为地址,或者说对象引用里的内容,而不是对象里的内容,ss1和ss2是两个对象,占据了堆内存中的两块内存空间(局部变量ss1,ss2在栈内存),所以s1==s2,ss1!=ss2equals()方法是想要比较对象里的内容相等否,一般由用户重写实现,另jvm已经对String和Date这两个常用对象的equals()进行了重写,方法体中比较的是对象内容,所以s1 equals s2,ss1 equals ss2
回复

使用道具 举报

千问 | 2009-12-7 21:59:37 | 显示全部楼层
==运算符比较的是对象的引用,而equals比较的是对象的值 ---这句话对ss1不等ss2因为这两个是你定义的。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行