1.java基本数据类型有哪些,int, long占几个字节

==
是运算符,用于比较两个变量是否相等
equals
是Objec类的方法,用于比较两个对象是否相等
hashCode
也是Object类的方法,返回一个离散的int型整数。在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等)
Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。所以我们不能单纯的说equals到底比较的是什么。你想知道一个类的equals方法是什么意思就是要去看定义。Java中默认Object类的equals方法是比较两个对象的地址,跟==的结果一样的, equals方法实现如下:
public boolean equals(Object obj) {
return (this == obj);
}
而String类则覆写了这个方法,直观的讲就是比较字符是不是都相同。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
equals如何比较并不重要,但是不理解equals存在的目的就容易踩坑。
Java中hashcode()和equals()的联系
一些教程说Java中 == 表示比较对象的内存地址,而equals比较具体的内容,这个说法其实不准确。equals的存在的作用在于允许程序员自己根据需要定义比较方法,由程序员自己决定两个对象满足什么条件算作是相等。一些书上这么写是因为使用String类的 == 和equals举例的。String.equals()只比较字符串的具体内容是由它的实现决定的。
如果两个对象通过equals方法比较是相等的,那么他们调用hashCode方法就要得到相同的hash返回值。
相反,如果两个对象调用hashCode有相同的返回值,不一定要求他们equals比较相等。
也就是说,当你为一个自定义类覆写equals方法时,也要记得覆写相应的hashCode方法,保持一致。否则操作自定义类的集合时会存在潜在的问题,具体看文章链接
3.java的拆装箱
5分钟彻底理解-Java自动装箱、拆箱
4.String s=new String("abc")创建了2个对象的原因
5.位运算
负数与二进制换转方法
Java 位运算(移位、位与、或、异或、非)
7.为什么String被设计为不可变?是否真的不可变?
为什么String要设计成不可变的?
String.intern()
网友评论