上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(十二)-CSDN博客
二十五、char 类型可以存储中文汉字吗?
在Java中,char
类型用于存储字符,并且它是16位的,这使得它能够存储Unicode字符集中的大多数字符,包括中文汉字。
char
类型和Unicode
-
Unicode字符集: Unicode是一个国际标准,它为世界上大多数的文字系统提供了一个唯一的码位。Unicode字符集包含了中文、日文、韩文等语言的字符,以及其他多种文字和符号。
-
char
类型的容量: 由于char
类型是16位的,它能够表示2^16
,即65536个不同的字符。Unicode字符集中的基本多文种平面(BMP)包含了大多数常用字符,包括中文汉字,其码位完全在char
类型的表示范围内。 -
Java对Unicode的支持: Java在设计之初就支持Unicode字符集,特别是在JDK 1.2之后,Java平台全面支持Unicode,所有的字符处理都基于Unicode。
-
存储中文汉字: 中文汉字在Unicode字符集中通常占用一个码位,大多数中文汉字的码位在
char
类型的表示范围内。因此,Java中的char
类型完全可以存储一个中文汉字。
示例
public class CharExample {
public static void main(String[] args) {
char chineseChar1 = '汉';
char chineseChar2 = '字';
System.out.println("Chinese characters: " + chineseChar1 + chineseChar2);
}
}
在这个示例中,两个中文汉字“汉”和“字”都被存储在char
类型的变量中,并且可以通过字符串连接的方式进行输出。
补充说明
虽然char
类型可以存储中文汉字,但在某些情况下,特别是在处理包含多种语言文字的文本时,可能会遇到超出BMP的字符(如一些表情符号或较少使用的字符),这些字符在Unicode中的码位被称为“辅助平面”字符,它们需要通过一对char
(称作代理对)来表示。Java的String
、StringBuilder
和StringBuffer
类都能够正确处理这些辅助平面字符。
总结
char
类型在Java中是用于存储Unicode字符的,由于其16位的存储能力,完全可以存储中文汉字以及其他大多数语言的字符。Java对Unicode的全面支持使得处理国际化文本变得更加方便和一致。
二十六、重载和重写有什么区别?
在面向对象编程中,重载和重写是两个不同的概念,它们都与方法的实现和调用有关,但它们的含义和应用场景截然不同。
重载(Overloading)
-
定义: 重载是在同一类中定义多个同名方法,但它们的参数列表(参数的数量或类型)不同。
-
目的: 重载允许开发者为类创建多个行为相似但操作不同参数的方法。
-
应用场景:
- 不同数量的参数:如
public int calculate(int a, int b)
和public int calculate(int a)
。 - 不同类型的参数:如
public void print(Object obj)
和public void print(String str)
。 - 不同顺序的参数(配合可变参数):如
public int sum(int a, int b)
和public int sum(int... numbers)
。
- 不同数量的参数:如
-
实现细节: 编译器在调用重载方法时,会根据方法签名(方法名和参数列表)来决定调用哪个方法。
重写(Overriding)
-
定义: 重写是子类中定义一个与父类中具有相同方法签名的方法。
-
目的: 重写允许子类改变从父类继承来的方法的行为。
-
应用场景: 当子类需要有与父类不同的行为时,子类可以重写父类的方法。
-
实现细节:
- 重写的方法必须具有相同的方法名和相同的参数列表。
- 重写的方法不能有比父类方法更严格的访问权限(例如,不能将父类的公共方法重写为私有)。
- 如果父类方法被声明为
final
,则不能被重写。
主要区别
- 作用范围:重载是编译时多态,作用于同一个类中;重写是运行时多态,作用于继承关系中的不同类。
- 参数列表:重载要求方法必须有不同的参数列表;重写要求方法必须有相同的参数列表。
- 返回类型:重载的方法可以有不同返回类型,但建议遵循一致的返回类型原则;重写的方法必须保持与被重写方法相同的返回类型。
- 访问权限:重载的方法可以改变访问权限;重写的方法的访问权限不能比被重写方法的更严格。
- 构造方法:不能重载构造方法(因为构造方法的名字是类名),但可以重写。
示例
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override // 可以明确指出重写
public void sound() {
System.out.println("Dog barks");
}
}
class Test {
public void display(int a) {
System.out.println("One argument");
}
public void display(int a, int b) {
System.out.println("Two arguments");
}
}
在这个示例中,Dog
类重写了 Animal
类的 sound
方法,而 Test
类的 display
方法被重载了两次,分别接受一个和两个 int
参数。