话不多说,我们直接上干货
-
Java的基本数据类型(面试率⭐⭐⭐ 难度⭐)
Java有4类8种数据类型
一、整型
-
byte:8位有符号整数,范围为-128到127。
-
short:16位有符号整数,范围为-32768到32767。
-
int :32位有符号整数,范围为-2147483648到2147483647。
-
long:64位有符号整数,范围为-9223372036854775808到9223372036854775807。
二、浮点型
-
float:32位浮点数,通常表示单精度浮点数。
-
double:64位浮点数,通常表示双精度浮点数。
三、字符型
-
char:16位Unicode字符,表示一个字符。
四、布尔型
-
boolean:布尔类型,只有两个值:true和false。
-
枚举类型(面试率⭐⭐⭐ 难度⭐⭐)
一、什么是枚举类型
枚举类型是一种特殊的数据类型,用于表示一组具有特定顺序的有限数目的情况或值。枚举类型的值是确定的,而且是唯一的。枚举类型的定义通常包含一系列枚举值,每个枚举值都有一个唯一的标识符。在许多编程语言中,都可以使用关键字enum来定义枚举类型。例如:
enum Color {
RED,
GREEN,
BLUE
}
上面的代码定义了一个名为Color的枚举类型,包含了三个枚举值:RED、GREEN和BLUE。可以使用枚举类型的枚举值作为常量使用,也可以将枚举类型赋值给变量。例如:
Color c1 = Color.RED;
Color c2 = Color.GREEN;
枚举类型在编程中常用于表示一组相关的固定值,可以提高代码的可读性和可维护性。
二、枚举和类的区别
枚举 | 类 | |
---|---|---|
定义方式 | 使用enum关键字进行声明 | 使用class关键字进行声明 |
继承关系 | 不能继承 | 可以继承其他类 |
实例化 | 枚举常量是枚举类型的实例 | 可以创建类的实例对象 |
可修改性 | 枚举常量是不可修改的 | 类的属性和状态可以被修改 |
字段 | 可以有自己的字段 | 可以有自己的字段 |
方法 | 可以有自己的方法 | 可以有自己的方法 |
唯一性 | 每个枚举常量是唯一的 | 可以创建多个类的实例对象 |
比较 | 使用‘==’进行比较 | 可以通过重写equals()方法进行比较 |
用途 | 表示一组相关的常量 | 封装数据和行为,实现复杂的功能 |
总结:枚举和类是两种不同的概念,枚举用于表示一组相关的固定值,而类用于表示对象的属性和行为。它们的使用场景和功能都有所不同
三、枚举可以修改吗?
枚举类型在定义后是不可以修改的,但是可以添加新的枚举值。可以通过enum关键字重新定义枚举类型,并添加新的枚举值,也可以使用addEnumConstant方法动态地添加枚举值。例如:
public enum Color {
RED, GREEN, BLUE;
}
Color.newEnumConstant("YELLOW") = Color.YELLOW;
以上代码定义了一个枚举类型Color,包含了RED、GREEN和BLUE三个枚举值。然后使用newEnumConstant方法动态地添加了一个新的枚举值YELLOW。
-
== 和 equals(面试率⭐⭐⭐ 难度⭐)
一、== 和 equals的区别?
在Java中,==操作符用于比较两个对象的引用是否相同,即比较的是对象的内存地址。而equals()方法用于比较两个对象的内容是否相同。默认情况下,对于Object类来说,==操作符和equals()方法是等价的,但是很多类都会重写equals()方法来定义自己的比较规则,因此在使用时需要注意。 需要注意的是,对于基本数据类型,==操作符比较的是值,而不是引用。
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2); // true,因为str1和str2是常量,使用同一个引用
System.out.println(str1 == str3); // false,因为str1和str3是不同的引用,指向不同的对象
System.out.println(str1.equals(str2)); // true,因为str1和str2的内容相同
System.out.println(str1.equals(str3)); // true,因为str1和str3的内容相同
在代码中,首先创建了三个字符串对象,其中str1和str2是常量,使用同一个引用,所以相等;str3是通过new关键字创建的,所以是一个新的引用,不相等。但是因为equals方法是重载的,所以两个字符串对象的内容相同,equals方法返回true。因此,==操作符比较的是引用,而equals方法比较的是对象的内容。
二、字符串比较是用equals还是==?为什么?
字符串比较应该使用equals方法,而不是使用==操作符。 ==操作符比较的是两个字符串对象的引用是否相同,即是否指向同一个内存地址;而equals方法比较的是两个字符串对象的内容是否相同。 当我们想要比较两个字符串是否相等时,应该使用equals方法,因为只有内容相同才被认为是相等的字符串。而引用相同的字符串并不一定意味着内容相同。 以下是使用equals方法比较字符串的示例代码:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1.equals(str2)); // 输出true,因为str1和str2的内容相同
System.out.println(str1.equals(str3)); // 输出true,因为str1和str3的内容相同
System.out.println(str2.equals(str3)); // 输出true,因为str2和str3的内容相同
System.out.println(str1 == str2); // 输出true,因为str1和str2是常量,使用同一个引用
System.out.println(str1 == str3); // 输出false,因为str1和str3是不同的引用,指向不同的对象
所以,对于字符串比较,应该使用equals方法。
-
this 和 super有什么区别(面试率⭐⭐ 难度⭐⭐)
this和super都是Java中的关键字,用于引用类的成员变量或调用成员方法,但它们的使用场景和作用有所不同。
1. this关键字:
- 用于引用当前对象的成员变量或调用当前对象的成员方法。
- 在成员方法中,this用于区分当前对象的成员变量和局部变量,或者区分同一个类的两个成员方法的参数。
- 在构造函数中,this用于调用当前对象的同名构造函数,用于在同一个对象的构造过程中进行调用。
- 当成员方法为静态方法时,无法使用this关键字,因为静态方法没有对象意识,无法访问非静态成员变量和调用非静态方法。
2. super关键字:
- 用于引用父类的成员变量或调用父类的成员方法。
- 在子类的构造函数中,super用于调用父类的同名构造函数,用于在子类的构造过程中进行调用父类的构造函数。
- 在子类的成员方法中,super用于调用父类的成员方法或重写父类的方法。
总结:
- this用于引用当前对象的成员变量或调用当前对象的成员方法,super用于引用父类的成员变量或调用父类的成员方法。
- this用于区分同一个对象的成员变量和局部变量,super用于调用父类的构造函数和成员方法。
- 当成员方法为静态方法时,无法使用this关键字,super必须在子类的方法中使用。
- this和super必须在类的成员方法中使用,而在构造函数中必须作为第一个词使用。
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Student extends Person {
private String major;
public Student(String name, String major) {
super(name);
this.major = major;
}
@Override
public String getName() {
return super.getName();
}
public String getMajor() {
return major;
}
}