※ “==” 和 equals()的区别
※ == :比较
. 基本数据类型比较的是值;
. 引用类型比较的是地址值。
※ equals(Object o):
1)不能比较基本数据类型,基本数据类型不是类类型;
2)a.比较引用类型时(该方法继承自Object,在object中比较的是地址值)等同于”==”;
Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。
2)b.如果自己所写的类中已经重写了equals方法,那么就安装用户自定义的方式来比较俩个对象是否相等,如果没有重写过equal方法,那么会调用父类(Object)中的equals方法进行比较,也就是比较地址值。
注:有的实现类中(JDK中),重写了equals方法,这时候比较内容(java.lang.String)
在自定义类中,如果比较对象,自己可以重写equals方法定义比较规则。
注意:equals(Object o)方法只能是一个对象来调用,然后参数也是要传一个对象的。
所以下面是错误的写法:
int a = 1;
a.equals(1);
因为基本数据类型不是算是对象,不能调用方法。
1)如果是基本数据类型那么就用==比较
2)如果是引用类型的话,想按照自己的方式去比较,就要重写这个类中的equals方法,
如果没有重写,那么equals和==比较的效果是一样的,都是比较引用的地址值。
3)如果是比较字符串,那么直接用equals就可以了,因为String类里面已经重写了equals方法,
比较的时候字符串的内容,而不是引用的地址值了。
※ toString(): Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。
toString()方法,继承自Object(默认构造对象之后打印地址值,可以不指明toString()方法,隐式调用)
Student s=new Student();
Syso(s);
Syso(s.toString())
注:如果在代码中,不希望打印地址,
可以重写toString()方法(一般情况用于打印构建对象的属性)
当前用一个引用指向一个对象的时候,比如:Student s = new Student(),然后如果直接打印这个引用s,其实是调用了s.toString()方法,然后就会把这个引用里面的存放的堆区对象的地址值显示出来。所以我们会常常在类中重写这个toString()方法,然后让这个类的引用按照我们要求来返回内容。
※ getClass():Object类中的方法,所以,在每一个java类中,都会有这个方法,并且这个方式final修饰的,不能被子类重写,这个方法可以返回某一个引用在运行的时候指向对象的类型。
getClass() 获取.class文件经JVM加载到方法区中模版的位置,不管构建对象模版始终是一个
例如:Person p = new Student()
//会输出:class com.briup.chap06.Student
//说明这个引用p在运行时指向的是Student这个类的对象
//注意这个引用p的类型是Person的(多态)
System.out.println(p.getClass());
package com.briup.ObjetEquals;
public class Tea {
private int age;
private String name;
public Tea() {
}
public Tea(String name, int age) {
this.name = name;
this.age = age;
}
//t.equals(t1)
@Override
//重写equals方法
public boolean equals(Object obj) {
if(obj==null){
//不相等
return false;
}else if(!(obj instanceof Tea)){
return false;
}
Tea t=(Tea) obj;
if(this.age==t.age){
return true;
}
return false;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Tea [age=" + age + ", name=" + name + "]";
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.briup.ObjetEquals;
public class TeaTest {
public static void main(String[] args) {
int a=10;
int b=10;
String str="hello";
String str1="hello";
String str2=new String("hello");
1. System.out.println(str==str2);
//字符串中的equals是String这个类重写过的方法
//只比较内容
//equals方法继承子Object类,在Object中比较的是地址
//值和内容,等价于==
System.out.println(str.equals(str2));
Tea t=new Tea("lisi", 33);
Tea t1=new Tea("tom", 33);
Tea t2=new Tea("tom", 33);
Tea t3=new Tea("tom", 33);
//假设年龄相同的认为是同一个对象,重写eqauls()
//在比较的对象内部
System.out.println(t.equals(t1));
System.out.println(t);
System.out.println(t.getName()+"--"+t.getAge());
System.out.println(t.toString());
2. //getClass获取运行是对象的模版(镜像)
Class c=t.getClass();
//得到镜像模版
system.out.println(t.getCLass());
System.out.println(c);
Class c1=t1.getClass();
System.out.println(c1);
Class c2=t2.getClass();
System.out.println(c2);
Class c3=t3.getClass();
System.out.println(c3);
Tea t2=t;
System.out.println(t);
System.out.println(t2);
System.out.println(t==t2);
}
}
※ 简述String s=”“和” “,以及null的区别
“”代表空字符串,会在堆区开辟空间。
“ ”代表一个还有空格字符的字符串。
null 代表空值,不会再堆区开辟空间。