目录
5.String、StringBuffer、StringBuilder三者之间的区别?
目录
5.String、StringBuffer、StringBuilder三者之间的区别?
1.为什么重写equals还要重写hashcode?
如果只重写了 equals 方法,会先判断两个对象的 hashCode 是否相同,此时因为没有重写 hashCode 方法,所以会直接执行 Object 中的 hashCode 方法,而 Object 中的 hashCode 方法对比的是两个不同引用地址的对象,所以结果是 false,那么 equals 方法就不用执行了,直接返回的结果就是 false。
2.hashcode相同equals可能不同吗?
是可以的。hashcode相同只能表明二个对象的地址都在这一块区域,equals还会比较其内容是否相同。
3.重载和重写的区别?
1.重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问权限修饰符可以不同,发生在编译时。
2.重写: 发生在父子类中,方法名和参数列表必须相同,返回值范围可以小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private,则子类就不能重写该方法。
4.Java中==和equals的区别?
== 的作用:
基本类型:比较的就是值是否相同。
引用类型:比较的就是地址值是否相同。判断等号左右两个对象是否是同一个对象。
equals 的作用:
引用类型:默认情况下,比较的是地址值。
特点:String、Integer、Date这些类库中equals被重写,比较的是内容而不是地址!
5.String、StringBuffer、StringBuilder三者之间的区别?
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 中的String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[] ,String对象是不可变的,也就可以理解为常量,线程安全。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
小结:
(1)如果要操作少量的数据用 String;
(2)多线程操作字符串缓冲区下操作大量数据用 StringBuffer;
(3)单线程操作字符串缓冲区下操作大量数据用 StringBuilder。
6.接口和抽象类的区别是什么?
实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
构造函数:抽象类可以有构造函数;接口不能有。
main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符
7.对象创建的流程分析?
class Person {
int age = 90;
String name;
Person(String n,int a){
name = n;
age = a;
}
}
Person p = new Person("小红",20);
• 流程分析(本题有关于类加载的内容考察)
1.加载Person类信息(Person.class),只会加载一次
2.在堆中分配空间(地址)
3.完成对象初始化[3.1 默认初始化 age=0 name=null 3.2显示初始化 age=90 name=null 3.3构造器的初始化 age=20,name=小红]
4.在对象在堆中的地址,返回给p(p是对象名,可以理解为是对象的引用)
8.java的动态绑定机制
1.当调用对象方法的时候, 该方法会和该对象的内存地址/运行类型绑定。
2.当调用对象属性时,没有动态绑定机制,哪里声明,那里使用。
9.final关键字的作用
final关键字可以用于三个地方。用于修饰类、类属性和类方法。
被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);
对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错。