可以用==判断(深比较,只有是同一个对象时才会相等)
equals方法(浅比较,只要内容相等就返回真),如在自定义的类中使用,须重写hashCode()与equals()具体可以参考(包装类)
equals方法(浅比较,只要内容相等就返回真),如在自定义的类中使用,须重写hashCode()与equals()具体可以参考(包装类)
解决方案 »
- 一个java自动打开文件的问题
- System.out.println("aaa 88888c".matches(".{3}\\b\\d{5}.")); 看看这个正则表达式问题在哪里?
- java中怎么使用oracle的序列,过程和函数
- 求助.出现空指针错.
- 如何使一个TextField只接受数字的输入?
- ireport怎么做主从表
- 请问java读取xml文档中数值的办法?
- 请教Radius包的格式!
- 请教sybase数据库分页?
- 强烈抗议!!为什么不可以将贴子提前?老是报错?
- 未入门新手,一开始就遇到问题,求助!
- 我在applet里弹出一个窗口(window或JFrame),可是窗体底部总是带有一行文字:Java Applet Window,我的窗体并没有加入这个,为什么Apple
hashcode()记不清楚了 是不是比较字符串长度的呀 这个你在问下别人吧
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)
String str1 = new String("abc");
String str2 = new String("abc");
str1.equals(str2)的值为true //内容是否相同
str1 == str2的值为false` // 不是同一对象
String str1 = new String("abc");
String str2 = new String("abc");
str1.equals(str2)的值为true //内容是否相同
str1 == str2的值为false` // 不是同一对象
________________________________________________
这个实在是难以理解!采用equals()方法是用来比较对象的内容是否相等。采用“==”来比较对象的时候才是比较的对象的地址。如楼上所说,声明了两个字符串引用变量str1和str2,由于产生两个对象,所以一定是在内存中占用了不同的空间,所以两个对象所在内存的首地址肯定不同,而str1和str2中恰恰是存放的两个对象的首地址,所以采用“==”比较结果一定不同。而equals()方法比较的是两个对象的内容,str1和str2所引用的对象,内容都是“abc”,所以用equals()比较后相等。
==是判断地址,而equals是判断其实质是否相等,因此一般要重写equals,同时重写hashCode。
public class MyKey
{
private String name;
private int age;
}
求就!
public boolean equal(Object o) {
if (name.equal((MyKey)o.getName())
&& age == (MyKey)o.getAge) {
return true;
} else {
return false;
}
}
其中getName()和getAge是获得对象name和age的方法~~~
因此一般要重写equals,同时重写hashCode。hashCode()怎么重写???
里面要写什么代码???
我是新手,
从来没碰到过!
请教各位
比如我自定义类
public class MyKey
{
private String name;
private int age;
}
if (name.equals(((MyKey)o).getName())
&& age == ((MyKey)o).getAge()) {
return true;
} else {
return false;
}
}
不好意思刚刚写的有点问题,这个比较准确~~~
根类的实现,根据需要而定。一、关于对象比较
1、用“==”号:对于基本类型比较的是值;对于对象类型,比较的则是引用(即地址)
举个例子:
int i=5;
int j=5;
显然i等于j.
对于对象:
String o=new String("hello");
String oo=new String("hello");
则o==oo的值为false,因为虽然他们指向的内容相同,但是是两个不同的引用
但是对于String类有个陷阱:
String s="hello";
String str="hello";
则 s==str的值为true,这并不说明以上的规则不对,而是因为String是个不变类,
如果没用new操作符的话,若已经存在该字符常量hello
对于String str="hello"这样的指令只是将str指向s相同的地址。恰恰说明了规则的正确性!2、用equals()方法:
Object类实现equals()的代码如下:
# public boolean equals(Object obj) {
# return (this == obj);
# }
可见默认的实现效果是跟“==”一样的!!!!!
很多时候,我们并不需要比较引用是否相等,我们要判定两个引用指向的内容是否相等
这时候你就需要重写该方法,而String类就是这么做的,那么:
o.equals(oo)与s.equals(str)的值都是true!二、关于hashcode():用在集合操作里面尤其是hashtable结构里,如果两个对象相等,则该方法返回的
int值必须相等;反之则不成立。