Java面试题大全之Java基础面试题系列三(每天巩固一点点)

本文详细探讨了Java构造方法的特性,解释了无参构造方法在继承中的作用,对比了Integer和int的区别,介绍了装箱和拆箱的概念,以及char类型存储汉字的可能性。此外,还讨论了switch语句的适用范围,字节与字符的区别,Java基本类型和引用类型的不同,以及String、StringBuilder和StringBuffer在字符串操作上的差异。最后,阐述了基本类型与String之间的转换方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

21、构造方法有哪些特性?

1、名字与类名相同;

2、没有返回值,但不能用 void 声明构造函数;

3、成类的对象时自动执行,无需调用。

22、在 Java 中定义一个不做事且没有参数的构造方法的作用?

Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是:在父类里加上一个不做事且没有参数的构造方法。

23、Integer 和 int 的区别?

1、int 是 Java 的八种基本数据类型之一,而 Integer 是 Java 为 int 类型提供的封装类;

2、int 型变量的默认值是 0,Integer 变量的默认值是 null,这一点说明 Integer 可以区分出未赋值和值为 0 的区分;

3、Integer 变量必须实例化后才可以使用,而 int 不需要。

4、由于 Integer 变量实际上是对一个 Integer 对象的引用,所以两个通过 new 生成的 Integer 变量永远是不相等的,因为其内存地址是不同的;

5、Integer 变量和 int 变量比较时,只要两个变量的值是相等的,则结果为 true。因为包装类 Integer 和基本数据类型 int 类型进行比较时,Java 会自动拆包装类为 int,然后进行比较,实际上就是两个 int 型变量在进行比较;

6、非 new 生成的 Integer 变量和 new Integer() 生成的变量进行比较时,结果为false。因为非 new 生成的 Integer 变量指向的是 Java 常量池中的对象,而 new Integer() 生成的变量指向堆中新建的对象,两者在内存中的地址不同;

7、对于两个非 new 生成的 Integer 对象进行比较时,如果两个变量的值在区间[-128, 127] 之间,则比较结果为 true,否则为 false。

Java 在编译 Integer i = 100 时,会编译成 Integer i = Integer.valueOf(100),而 Integer 类型的 valueOf 的源码如下所示:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

从上面的代码中可以看出:Java 对于 [-128, 127] 之间的数会进行缓存,比如:Integer i = 127,会将 127 进行缓存,下次再写 Integer j = 127 的时候,就会直接从缓存中取出,而对于这个区间之外的数就需要 new 了。

24、装箱和拆箱

自动装箱是 Java编译器在基本数据类型和对应得包装类之间做的一个转化。比如:把int 转化成 Integer,double 转化成 Double 等等。反之就是自动拆箱。

原始类型:boolean、char、byte、short、int、long、float、double

封装类型:Boolean、Character、Byte、Short、Integer、Long、Float、Double

25、char 类型变量能不能存储一个中文的汉字,为什么?

char 类型变量是用来存储 Unicode 编码的字符的,Unicode 字符集包含了中文,所以 char 类型变量当然可以存储汉字。但是如果某个生僻字没有包含在 Unicode 编码的字符集中,那么 char 就不能存储该生僻字。

常用中文字符用 utf-8 编码占用 3 个字节(大约 2 万多字),但超大字符集中的更大多数汉字要占 4 个字节。GBK、GB2312 收编的汉字占 2 个字节。

26、switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?

在 switch(expr 1) 中,expr1 只能是一个整数表达式或者枚举常量。而整数表达式可以是 int 基本数据类型或者 Integer 包装类型。由于,byte、short、char 都可以隐式转换为 int,所以,这些类型以及这些类型的包装类型也都是可以的。而 long 和 String 类型都不符合 switch 的语法规定,并且不能被隐式的转换为 int 类型,所以,它们不能作用于 switch 语句中。不过,需要注意的是在 JDK1.7 版本之后 switch 就可以作用在String 上了。

27、字节和字符的区别?

字节是存储容量的基本单位;

字符是数字、字母、汉字以及其他语言的各种符号;

1 字节 = 8 个二进制单位,一个字符由一个字节或多个字节的二进制单位组成。

28、Java 基本类型和引用类型的区别?

基本类型保存原始值,引用类型保存的是引用值(引用值就是指对象在堆中所处的位置)。

29、String、StringBuilder、StringBuffer的区别?

1、String:用于字符串操作,属于不可变类;【补充:String 不是基本数据类型,是引用类型,底层用 char 数组实现的】

2、StringBuffer:也用于字符串操作,不同之处是 StringBuffer 属于可变类,对方法加了同步锁,线程安全;

3、StringBuilder:与 StringBuffer 类似,都是字符串缓冲区,但线程不安全。

执行效率:StringBuilder > StringBuffer > String,String 字符串修改实现的原理:当用 String 类型来对字符串进行修改时,其实现方法是首先创建一个 StringBuffer,其次调用 StringBuffer 的append() 方法,最后调用StringBuffer 的 toString() 方法把结果返回。

30、String 与基本数据类型直接的转换?

字符串转换为基本数据类型:调用基本数据类型对应包装类中的方法parseXXX(String) 或者 valueOf(String) 即可返回相应的基本数据类型;

基本数据类型转换为字符串:一种方法是将基本数据类型与空字符串(””)连接(+)即可获得其对应的字符串;另一种方法是调用 String 类中的 vauleOf() 方法返回相应字符串。

看完如果对你有帮助,感谢点击下面的一键三连支持下!

我的个人订阅号(大叔学Java/dashu_java),文章第一时间在公众号发布,感兴趣的可以关注下,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值