小问题!麻烦帮我解决下!关于==的! 自己写的类如何用==来判断true或false? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 判断一个对象是否相等可以用equles,Object.equles(Object)==true java 不提供运算符重载,别想了,用==来比较引用类型,能返回true的就两种可能一是自己和自己比,但是String a="aaa";String b="aaa";a==b;-->falsea==a;-->trueb==b;-->true二是jdk1.5的自动装拆箱System.out.println(10==new Integer(10));-->trueSystem.out.println(new Integer(10)==new Integer(10));-->????????你要弄清楚java怎么把值放在内存里的,栈,堆栈,堆,你就明白了 java 不提供运算符重载,别想了,用==来比较引用类型,能返回true的就两种可能 一是自己和自己比,但是 String a="aaa"; String b="aaa"; a==b;-->false 错了,java中对字符串的处理是放在堆栈中的,比较特殊,所以a==b是返回true的但是a=="aaa"是错的,虽然它们的值一样不好意思 重写public boolean equals(Object obj)这个方法 若果是判断两个对象是否引用的是同一个对象可以用==即内存地址是否相同,如过是判断两个对象的内容是否相同只能重写从Object继承来的equals(Object obj)方法了,具体的写法你可以看看String类的源码 我认为关键你要注意到:==与equals的区别分别是对什么判断的?意识到这一点应该就能解决了 只要不是同一个对象,== 就会是false,你重写什么方法都没用。 在Java里, 比较相等 很特别,你需要分清 == 与equals 的区别。首先 == 是对2个地址值的内容相比觉,注意是内容,是值。 例如 a=3 ,b=4 是 3与4 比较而 equals 是比较地址。、、好知道上面的后,我们 说 两个 类进行比较。其实是同样的道理 你比较的是class 而在object这个类中有equals 你无须象楼上说的重写 equals 而是需要直接用equals比较即可,而==是类内比较用的。 重写 public boolean equals(Object obj) 你说的时候有没有试过?显然误导新人a=="aaa"b=="aaa"a==b都是true 对象之间的比较显然用==和equals是一样的都是比较的地址要比较内容就要重写equals方法 谁如果说==是比较的内容的话 你好好去看看java编程思想先比如String a="abc" 这时常量池或者字符串池中有个"abc"而 String b="abc"以后 他的引用b还是指向这个"abc"所以a==b比较以后 他们其实地址是相同的所以为true;而如果用a=="abc"比较 是先判断常量池中是否已存在"abc"再判断引用a是否指向它 所以结果也是true基本类型比较同理;但是String a=new String("abc")String b=new String("abc")后 再用a==b他们就是false因为创建了两个对象 他们比较的是堆里的对象地址 那怎么可能相同呢?本人虽然初学者但也不想看到没有实践过的真理; 对于类的比较你要想比较内容是否相等就用超类Object类的equals方法。并用自己的类来重写她即是obj.equals(obj1)如果你想比较他们的地址就用==一般他是用来比较基本类型的很少用来比较引用 说一个有趣的故事,再大家告诉我:工厂模式,是不是有三种:工厂方法、抽象工厂、工厂 ?? 一个很简单的字符串截取问题 关于接口,想通俗地学一下。 请教问题 @@@@@@@@@@@@@@@@@请指教 谢谢~关于Thread.currentThread.destory()的问题 一定得帮我看看sql server2000通过sql server2000jdbc driver的代码 jdk开发中设置系统环境变量有什么用? 哪有jbuilder的教程下载(中文的) 有关于链表实现搜索数据的问题 JAVA 线程 sleep()和synchronized 的抛异常问题 请问字符串后面写多个空格如何效率高
一是自己和自己比,但是
String a="aaa";
String b="aaa";
a==b;-->false
a==a;-->true
b==b;-->true二是jdk1.5的自动装拆箱
System.out.println(10==new Integer(10));-->true
System.out.println(new Integer(10)==new Integer(10));-->????????
你要弄清楚java怎么把值放在内存里的,栈,堆栈,堆,你就明白了
一是自己和自己比,但是
String a="aaa";
String b="aaa";
a==b;-->false
错了,java中对字符串的处理是放在堆栈中的,比较特殊,所以a==b是返回true的
但是a=="aaa"是错的,虽然它们的值一样
不好意思
public boolean equals(Object obj)这个方法
==与equals的区别
分别是对什么判断的?
意识到这一点应该就能解决了
public boolean equals(Object obj)
a=="aaa"
b=="aaa"
a==b都是true
要比较内容就要重写equals方法
比如String a="abc" 这时常量池或者字符串池中有个"abc"
而 String b="abc"以后 他的引用b还是指向这个"abc"
所以a==b比较以后 他们其实地址是相同的所以为true;
而如果用a=="abc"比较 是先判断常量池中是否已存在"abc"再判断引用a是否指向它 所以结果也是true
基本类型比较同理;
但是String a=new String("abc")
String b=new String("abc")后 再用a==b他们就是false
因为创建了两个对象 他们比较的是堆里的对象地址 那怎么可能相同呢?
本人虽然初学者但也不想看到没有实践过的真理;
obj.equals(obj1)
如果你想比较他们的地址就用==一般他是用来比较基本类型的
很少用来比较引用