equals()方法
概念
equals()方法是对象比较函数,按照对象比较,系统默认四个类覆写该方法:Integer , String,Date,file
没有覆写equals()方法的类会调用Object的equals()方法,Object类的equals()方法直接用==实现 比较过程:
1.首先判断两个比较对象类型是否相同
如果不同返回false
2.如果相同继续判断对象内容是否相同
如果相同返回true 如果不同返回false
使用方法以及注意事项
e.g.:
String s1=new String("aaa");
String s2=new String("aaa");
s1.equals(s2);
s1与s2的类型相同并但内容不一样,此时equals方法返回值为false。
String s1=new String("aaa");
String s2=new String("bbb");
s1.equals(s2);
s1与s2的类型相同并但内容不一样,此时equals方法返回值为false。
String s1=null;
String s2=new String("bbb");
s1.equals(s2);
此时会抛出NullPointerException异常,在做equals比较的时候一定要确保调用equals方法的对象不为空。
String currentName;
"123".equals(currentName);
currentName.equals("123") ;
equals前面的数据必须是String类型的,而括号里面的测试Object类型的。
所以上面的第二种比较方法很危险,不注意就会出现错误。
"= ="判等比较
概念
“= =”是等值比较,比较的是变量的内容
1.当比较对象为基本数据类型时,比较的是数据的大小
2.当比较对象为引用类型时,比较的是引用类型中存放的地址 使用方法以及注意事项
e.g.:
int n1=10;
int n2=10;
n1==n2;
因为n1,n2是基本数据类型,并且数据值相等所以此时返回true。
String s1="aaa";
String s2="aaa";
n1==n2;
由于字符串”aaa”创建时是在方法区的常量池中开辟的空间,并且下次使用时可以重复使用,s1,s2指向的地址是相同的,所以判等的结果是true
Integer n1=new Integer(45);
Integer n2=new Integer(45);
n1==n2;
n1与n2分别在堆区开辟了空间,两个变量所指向的地址不同,即使指向地址中的内容相同,判等的结果也是为false。
注意:
Integer n1=128;
Integer n2=128;
n1==n2;
Integer n3=127;
Integer n4=127;
n3==n4;
Integer包装类型中存在自动装箱的情况,当数据范围在-128~127之间时,创建的对象会在方法区的常量池中开辟空间(可复用),数据超出范围就会在堆区中开辟空间,由于指向不同对象所以n1==n2判等的结果为false,n3与n4指向常量池同一地址所以判等结果为true。
final关键字用法
1.修饰类当用final去修饰一个类的时候,表示这个类不能被继承。
注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。说明:在自己设计一个类的时候,要想好这个类将来是否会被继承,如果可以被继承,则该类不能使用fianl修饰,在这里呢,一般来说工具类我们往往都会设计成为一个fianl类。在JDK中,被设计为final类的有String、System等。
2.修饰方法被final修饰的方法不能被重写。
注意:
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。
3.修饰成员变量
注意:
a.必须要赋初始值,而且是只能初始化一次。
4.修饰成员变量
注意:
a. 必须初始化值。
b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。