1.equals和==的区别?
-
== 是一个比较操作符
-
对于基本类型,== 比较的是值
-
对于引用类型,== 比较的是地址
-
-
equals不能用于基本类型的比较
-
如果没有重写equals,equals 就相当于 ==
-
如果重写了equals,equals比较的是对象的内容
2.String、StringBuffer和StringBuilder的区别?
1.可变性:
-
String是不可变的类,一旦被创建就不能修改。每次对String进行操作时,都会创建一个新的String对象
-
StringBuffer和StringBuilder是可变的类,可以动态修改字符串的内容
2.安全性:
-
String是线程安全的,因为它是不可变的。多个线程可以同时访问同一个String对象而无需担心数据的修改问题。
-
StringBuffer是线程安全的,它的方法使用了synchronized关键字进行同步,保证在多线程环境下的安全性。
-
StringBuilder是非线程安全的,不使用synchronized关键字,所以在多线程环境下使用时需要手动进行同步控制。
3.性能:
-
由于String是不可变的,每次对String进行操作都会创建一个新的String对象,频繁的操作字符串会导致大量的对象创建和内存消耗。
-
StringBuffer是可变的,对字符串的修改是在原有对象上进行,不会创建新的对象,因此在频繁的字符串拼接场景下比String更高效。
-
StringBuilder与StringBuffer类似,但不保证线程安全性,因此在单线程环境下性能更高。
综上,如果在单线程环境下进行字符串操作,且不需要频繁修改字符串,推荐使用String;如果在多线程环境下进行字符串操作,或者需要频繁修改字符串,优先考虑使用StringBuffer;如果在单线程环境下进行频繁的字符串拼接和修改,推荐使用StringBuilder以获取更好的性能。
3.静态内部类和非静态内部类的含义和区别?
-
静态内部类:在外部类中,静态内部类中的静态成员和静态方法,可以直接由类名.静态成员 || 类名.静态方法
-
而静态内部类中的非静态成员和非静态方法,只能通过创建实例来调用非静态成员和非静态方法
-
非静态内部类:非静态内部类里面不能使用static去修饰成员变量和成员方法,只能通过创建实例来调用其中的成员变量和成员方法
4.什么是值传递和引用传递?
-
值传递:在函数调用时,将实际参数的值复制一份传递给形参。
-
在值传递中,对形参的修改只作用于函数内部
-
-
引用传递:在函数调用时,将实际参数的引用或地址传递给形参。
-
在引用传递中,对形参的修改会直接作用于函数外部的变量
-
5.String类能被继承吗,为什么?
-
在Java中,String类是被final关键字修饰的,即不可继承。
-
final表示一个类不允许被其他类继承,也就是说String类不能被任何类继承
-
String类具有不可变性和安全性
6.java中基本数据类型有哪些?
-
整数类型:
-
byte: 1个字节,在内存中范围为-128~~127
-
short: 2个字节 ,在内存中范围为-32768~~32767
-
int: 4个字节
-
long: 8个字节
-
-
浮点数类型:
-
float: 4个字节
-
double: 8个字节
-
-
字符类型:
-
char: 2个字节
-
-
布尔类型:
-
boolean: 1个字节,在内存中只能表示true或false
-
7.重载和重写的区别?
-
重载:
-
重载发生在本类中,方法名必须相同,但参数个数,参数类型,参数顺序不同
-
重载方法的返回类型可以相同,也可以不同
-
重载是为让同一个方法名的方法对不同情况进行处理
-
-
重写:
-
重写是指在子类中,对父类的方法进行重写
-
重写方法必须与被重写的方法拥有相同的方法名、返回值类型和参数列表
-
构造方法不能被重写
-
重写的访问权限不能比父类中被重写的方法的访问权限更低
子类中的重写方法访问权限高
父类中被重写方法访问权限低
-
重写的作用是实现多态性,通过父类的对象调用子类的重写方法,对同一个方法名的不同实现
-
8.接口和抽象类有什么区别?
-
接口 interface:
-
接口不能被实例化,类可以实现多个接口
-
接口的权限修饰符只能为public
-
在接口中,包含抽象方法,普通方法,静态方法,不包含实例变量和构造器
-
java8之后:在接口中,静态方法必须有方法体,普通方法和抽象方法没有方法体,需要在实现类中被实现;
小知识(重点)
在接口的静态方法,需要通过接口名.静态方法实现
在接口的抽象方法和普通方法,通过创建实现类的实例对象,再通过实例对象调用方法
-
抽象类 abstract:
-
抽象类中的抽象方法一定要被实现
-
抽象类包含构造器,普通方法,和抽象方法,不能包含静态方法
-
在抽象类中,普通方法需要有方法体
-
在抽象类中,抽象方法不需要方法体
-
-
抽象类不能被实例化,抽象类只能单继承
-
如果子类实现了所有的抽象方法,子类可以不是抽象类
-
如果子类没有实现所有的抽象方法,子类仍然是抽象类
-
9. 怎样理解oop面向对象?
OOP 面向对象编程:Object Oriented Programming
三个特性:
-
继承:从已有的类继承信息并创建新类
-
封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口
-
多态:不同类的对象在调用同一个方法时,表现出多种不同行为
10. 深拷贝和浅拷贝的理解?
都是指对对象的拷贝
一个对象存在两种类型的属性:
基本数据类型
实例对象的引用
-
浅拷贝:
-
只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向的对象
-
浅拷贝出来的对象,内部的类属性指向的是同一个对象
-
-
深拷贝:
-
即会拷贝基本数据类型的值,也会对实例对象的引用地址所指向的对象进行复制
-
深拷贝出来的对象,内部的类执行指向的不是同一个对象
-