equals是怎么回事?

问题描述

以下程序的输出结果______________________PublicclassMyClass{publicstaticvoidmain(Stringargs[]){Stringa=”Howareyou”;Stringb=newString(a);if(a==b)System.out.println(“==”);if(a.equals(b))System.out.println(“equals”);}}

解决方案

本帖最后由 fujing0103 于 2010-11-28 19:54:35 编辑
解决方案二:
equals
解决方案三:
原因是==默认的是比较两个对象的引用其实equals()默认的也是比较两个对象的引用,但是String重载了这个方法,让他比较内容了
解决方案四:
自己的理解,错了的话别误解你:结果是:equals==默认比较的是hash码,相当于C语言里面的地址而equals比较的是对象里面的具体内容。equals可以自己重写比较规则
解决方案五:
equals就一个判断两个对象是否“相等”的方法,具体如何判断算是“相等“,可以由你自己写的来决定String类重写过了equals方法,只要2个字符串内容是相同的就算相等所以就返回true
解决方案六:
java对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;Stringb=”Howareyou”;那么b仅仅是a的别名,它们两个的引用空间的地址是一样的
解决方案七:
publicclassMyClass{publicstaticvoidmain(Stringargs[]){Stringa="Howareyou";Stringb=newString(a);if(a==b)System.out.println("==");if(a.equals(b))System.out.println("equals");}}Stringa="Howareyou";在字符串池生成了一个对象,值是"Howareyou",a是它的引用。Stringb=newString(a);在堆里创建了一个对象,值是"Howareyou",b是它的引用。==比较的是地址,两个引用指向的地址很显然不同,一个在字符串池,一个在堆。equals比较的是值,值相同。如果改成Stringa="Howareyou";Stringb="Howareyou";(这里会先搜索字符串池,发现有相同的字符串存在,不创建新的对象)则两个引用指向相同的对象。此时会打印出“==”和“eauals".
解决方案八:
建议楼主去看看Object和String这两个类的equals()方法,就知道了
解决方案九:
该回复于2010-11-29 09:40:35被版主删除
解决方案十:
equals()是一个方法,是可以重写的,要怎么样比没人知,如果没有重写过的话,equals()比较的是对象的hashcode().
解决方案十一:
equals
解决方案十二:
引用5楼renhuihhh的回复:

java对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;St……

顶一下5楼和6楼.记得字符串有个常量池,这个常量池在方法区.不在堆上
解决方案十三:
LZ弄明白了可以在试试这题!Stringa="1";Stringb="1";Stringc=newString("2");Stringd=newString("2");System.out.println(a==b);System.out.println(c==d);System.out.println(c.equals(d));
解决方案十四:
引用12楼watersky_2009的回复:

LZ弄明白了可以在试试这题!Stringa="1";Stringb="1";Stringc=newString("2");Stringd=newString("2");System.out.println(a==b);System.out.println(c==d);System.out.println(c.equals(d));

这不挺简单的吗?
解决方案十五:
java中equals方法和“==”的区别equals方法是java.lang.Object类的方法。(1)如果是基本类型比较,那么只能用==来比较,不能用equals比如:publicclassTestEquals{publicstaticvoidmain(String[]args){inta=3;intb=4;intc=3;System.out.println(a==b);//结果是falseSystem.out.println(a==c);//结果是trueSystem.out.println(a.equals(c));//错误,编译不能通过,equals方法//不能运用与基本类型的比较}}(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。比如:publicclassTestEquals{publicstaticvoidmain(String[]args){Integern1=newInteger(30);Integern2=newInteger(30);Integern3=newInteger(31);System.out.println(n1==n2);//结果是false两个不同的Integer对象,故其地址不同,System.out.println(n1==n3);//那么不管是newInteger(30)还是newInteger(31)结果都显示falseSystem.out.println(n1.equals(n2));//结果是true根据jdk文档中的说明,n1与n2指向的对象中的内容是相等的,都是30,故equals比较后结果是trueSystem.out.println(n1.equals(n3));//结果是false因对象内容不一样,一个是30一个是31}}这是Integer的实例,如果是其他的比如Double、Character、Float等也一样。(3)注意:对于String(字符串)、StringBuffer(线程安全的可变字符序列)、StringBuilder(可变字符序列)这三个类作进一步的说明。(a)首先,介绍String的用法,请看下面的实例:publicclassTestEquals{publicstaticvoidmain(String[]args){Strings1="123";Strings2="123";Strings3="abc";Strings4=newString("123");Strings5=newString("123");Strings6=newString("abc");System.out.println(s1==s2);//(1)trueSystem.out.println(s1.equals(s2));//(2)trueSystem.out.println(s1==s3);//(3)flaseSystem.out.println(s1.equals(s3));//(4)flaseSystem.out.println(s4==s5);//(5)flaseSystem.out.println(s4.equals(s5));//(6)trueSystem.out.println(s4==s6);//(7)flaseSystem.out.println(s4.equals(s6));//(8)flaseSystem.out.println(s1==s4);//(9)falseSystem.out.println(s1.equals(s4));//(10)true}}
解决方案:
Lz应该会明白了
解决方案:
equals回复太短了
解决方案:
先google再提问吧
解决方案:
明显equals,"=="是比较地址,A,B不等,EQUALS比较内容相等!
解决方案:
学习了。以前也不怎么注意这一点。
解决方案:
“==”是地址比较,“equals”是值比较
解决方案:
equals也不能说是值比较要看这个方法被重写成什么样了就比较什么equals是object类的一个方法所有的子类都应该重写这个方法String类重写这个方法的时候定义了比较值当然了其他的类重写的时候你比较什么就比较什么
解决方案:
“==”比较的是两个对象的地址是否相等,具体的来讲就是比较地址的值,而“equals”比较的是两字符串的内容;关键还是会花堆栈内存划分图!!!!!!!!
解决方案:
引用5楼renhuihhh的回复:

java对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;Str……

很好的解释
解决方案:
温故而知新啊!!!
解决方案:
引用6楼qian119110的回复:

publicclassMyClass{publicstaticvoidmain(Stringargs[]){Stringa="Howareyou";Stringb=newString(a);if(a==b)System.out.println("==");if(a.equals(b))System.out.println("equals"……

+1
解决方案:
你的代码应当输出equals。下面的代码供你作对比:publicclasstest{publicstaticvoidmain(Stringargs[]){Stringa="Howareyou";Stringc="Howareyou";Stringb=newString(a);if(a==b)System.out.println("==ab");if(a==c)System.out.println("==ac");if(a.equals(b))System.out.println("equals:ab");if(a.equals(c))System.out.println("equals:ac");}}

先自己想想结果是什么。结果应该是==acequals:abequals:ac想明白为什么了吗?a和c在写程序的时候就都已经是写成了"Howareyou";虽然a和c变量名不同,但是他们指向相同的地址(这是因为,系统看到他们的内容是一样的,就把这个字符串存在同一个内存空间,只存储一次,之后吧这个空间的地址给变量名),也就是String变量所直接存储的东西,==运算符比较的就是这个直接的东西,所以a和c用==比较的结果是true;而需要注意的是,b=newString(a);和上面的直接写出来的效果是不一样的,系统真的会分配另一块空间出来~~所以用==比较a和c就是false;而equals就不一样了,它比较的是字符串的内容。你可以想象equals是怎么做的,取出字符串中中下标相同的字符一个一个地比较。a和b比较好理解,是两块不同内存区域中的数据一一比较,而a和b的比较实际上是同一块内存区域里面的东子,自己equals自己,所以返回结果也是true。
解决方案:
equals==是地址比较equals是值比较
解决方案:
引用14楼phenix33的回复:

java中equals方法和“==”的区别equals方法是java.lang.Object类的方法。(1)如果是基本类型比较,那么只能用==来比较,不能用equals比如:publicclassTestEquals{publicstaticvoidmain(String[]args){inta=3;intb=4;in……

.
解决方案:
引用2楼e_forrest的回复:

原因是==默认的是比较两个对象的引用其实equals()默认的也是比较两个对象的引用,但是String重载了这个方法,让他比较内容了

重写了
解决方案:
该回复于2010-12-07 10:50:45被版主删除
解决方案:
引用5楼renhuihhh的回复:

java对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;St……

+1
解决方案:
只有引用的内容不允许回复!引用16楼jayqean的回复:

equals回复太短了

解决方案:
LZ不防去看一下http://blog.sina.com.cn/s/blog_6a98783b0100nr5a.htmlequals和'=='的真正区别
解决方案:
学习了!不错啊!
解决方案:
等号是地址比较,“equals”是值比较
解决方案:
google一下
解决方案:
学习~~~~~~~
解决方案:
大家好强
解决方案:
String,Data,File和基本数据类型的包装类重写了equals()方法使得其比较的是内容,而其他的类都是比较地址。
解决方案:
是判断不同内存中存放的东西是否相同
解决方案:
一个是比较变量的指针是不是相等一个是比较变量指针所指的内容是不是相等
解决方案:
该回复于2010-12-08 14:57:28被版主删除
解决方案:
该回复于2010-12-10 10:28:50被版主删除
解决方案:
引用42楼pywepe的回复:

回复一下每天十分

跟住.
解决方案:
equals
解决方案:
引用5楼renhuihhh的回复:

java对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;St……

Up!
解决方案:
ava对字符串的处理比较特殊,会开辟一个字符串池,你每声明一个字符串(不用newString()),他就会去搜索这个池看看是否已经存在,如果用newString()他会另辟内存,就是说Stringa=”Howareyou”;Stringb=newString(a);b的内容跟a一样,但是地址不同,如果是:Stringa=”Howareyou”;Stringb=”Howareyou”;那么b仅仅是a的别名,它们两个的引用空间的地址是一样的
解决方案:
说的简单明了点就是比较两个对象是不是相等
解决方案:
publicclassTest{publicstaticvoidmain(Stringargs[]){Stringa="howareyou?";Stringb="howareyou?";//Stringb=newString(a);if(a==b)System.out.println("==");if(a.equals(b))System.out.println("equals");}}

这样的话既能输出==,又能输出equals.原因是使用“==”是比较两个String的地址,在java里面,这样定义意为着他们的地址是相同的,然后他们的值也相同,所以两个都输出来了。
解决方案:
equals

时间: 2024-10-18 14:20:09

equals是怎么回事?的相关文章

list怎么遍历不了 只能获取list.get(0)怎么回事

问题描述 list怎么遍历不了 只能获取list.get(0)怎么回事 Query queryRole = getSession().createQuery("select r from RoleUser r where r.userId=:user_id ").setString("user_id",app[i].getUser_id()); List <RoleUser> r = queryRole.list(); for(int j = 0;j&l

link中为什么说字符串是只读的,但是我可以改变字符串,这是怎么回事?

问题描述 link中为什么说字符串是只读的,但是我可以改变字符串,这是怎么回事? link中为什么说字符串是只读的,但是我可以改变字符串,这是怎么回事? 解决方案 字符串本来就是只读的.但是它的运算符重载过了,所以用+连接字符串,或者用=赋值,会自动产生一个新的字符串,而不会改变之前的那个. 解决方案二: string是一种很特殊的数据类型,它既是基元类型又是引用类型,在编译以及运行时,.Net都对它做了一些优化工作,正式这些优化工作有时会迷惑编程人员,使string看起来难以琢磨,这篇文章分上

保存商品信息失败?有时成功有时失败,怎么回事?啊

问题描述 保存商品信息失败?有时成功有时失败,怎么回事?啊 5C public void saveGood() { boolean temp = false; try { Dto dto = paraDto; StringUtil.xprint(""param=="" + paraDto); //处理编号 if(optype.equals(""add_good"")){ String good_id = UniqueID.ge

请问 java实现矩形选择,矩形中的图元高亮显示不出来是怎么回事啊? 代码如下;

问题描述 运行后只能出现矩形,不能将选择的图元显示出来,请问是怎么回事呢?js代码如下,实现拖动鼠标出现矩形:functionmapmousedown(){if(state=="rec"){vardivStyleObj=document.all.disRec.style;divStyleObj.left=window.event.clientX;divStyleObj.top=window.event.clientY;divStyleObj.width=0;divStyleObj.he

mvc-MVC5 entity framework6 表链接查询 怎么回事?

问题描述 MVC5 entity framework6 表链接查询 怎么回事? model代码如下: public class Orders { [Key] public int OrdersId { set; get; } //订单号 public string OrdersNum { set; get; } public string ProductName { set; get; } public int ProductId { set; get; } public string Pric

equals与== 的问题

问题描述 为什么不行?求教解法.源程序见下:privatevoidbutton1_Click(objectsender,EventArgse){stringa=Convert.ToString(myDataSet3.Tables[0].Rows[0][0]);stringb="2";MessageBox.Show(myDataSet3.Tables[0].Rows[0][4].GetType().ToString());if(a==b)allCell[0].Text="==O

为什么我new了3个Teacher对象,也覆盖了hashcode跟equals方法,而TreeSet中只有一个对象

问题描述 publicclassTeacherimplementsComparable<Teacher>{privateStringname;privateintage;privatedoublesalary;privateDatebirth;publicTeacher(Stringname,intage,doublesalary,Datebirth){super();this.name=name;this.age=age;this.salary=salary;this.birth=birth

java关于TreeSet修改属性值得问题,每次只能修改最后添加进去的属性值,这是怎么回事?

问题描述 java关于TreeSet修改属性值得问题,每次只能修改最后添加进去的属性值,这是怎么回事? 每次修改的都是最后一次添加进去的书号,怎么让他对应啊,麻烦大家了 例:书号1:001 书号2:002 输入要修改的001,他直接修改002的去了..麻烦大家解决一下,已经想了很久了,还是没有想出来,麻烦大家了! public void updateBookID(String bookID){ /** * 思路: * 首先.先输入要修改的书号(原书号) * 其次.再输入你要修改的书号 * 最后.

java判断“==”和equals用法区别

java中的'=='运算符用于比较两个变量本身的值,即两个对象在内存中的首地址. 'equals()'方法比较的是两个字符串中所包含的内容是否相同. 对于非字符串类型的变量来说,'=='运算符和'equals()'方法都是用来比较其所指对象在堆内存中的首地址,即比较两个类类型的变量是否指向同一个对象. 1.声明格式     public  boolean equals(Object obj)    其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.