简介
本人最近找工作,在面试javase基础这里,有很多公司还是喜欢考察基本数据类型和包装类型的使用情况,重点就是考察日常生活中对数据类型的选定还有使用场景做考察,比如问基本数据类型的占几个字节,取值范围多少、基本数据类型默认以及数据类型隐式转化等问题。
基本数据类型
java是一种强类型语言,所以定义一个变量需要声明变量的数据类型,java一共提供了8种数据类型,其中整数类型有byte、short、int、long,以及2种浮点类型:float与double,Unicode编码的字符单元类型char,以及表示真假的boolean类型。
- 整数类型
| 类型 | 存储字节 |
|---|---|
| byte | 1个字节 |
| short | 2个字节 |
| int | 4个字节 |
| long | 8个字节 |
需要注意的是如果没有制定类型整数类型默认值类型是int。
- 浮点型
| 类型 | 存储字节 |
|---|---|
| float | 4个字节 |
| double | 8个字节 |
默认情况下浮点型默认是double类型,因为double的数值精度是float的两倍。
- char类型
char类型表示单个字符,通常用来表示字符常量。 - boolean类型
boolean类型有两个值,false和true。
面试题
- int的最大值加1会发送什么结果?
这个是遇到很有意思的面试题,最开始我回答了一个可能会造成溢出,报错什么的。很遗憾面试官说不对,所以面试后特地写个测试方法看看到底会发送什么?

运行结果是true。
这大概是我遇到最有意思的面试题了,因为当时对这块最大值溢出这块并不是很熟悉。所以这道题也并没有回答好。
包装类型
由于基本数据类型属于局部变量表,也就是存储在方法区上。而在java5后引入了包装对象,即基本数据类型有着对应的包装对象类型。包装对象是不可变的,一旦构造了包装对象,就不能改变包装的值,同时包装类对象还是final修饰的,所以这些包括类没有子类。
| 类型 | 对应包装对象 |
|---|---|
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| short | Short |
| byte | Byte |
| char | Character |
| boolean | Boolean |
面试题
包装类型最常见就是考察Integer的一个位于-128和127的一个缓存,通过源码我们可以清晰看到这一点,
一个就是int类型到Integer转变其实是调用了Integer.valueOf这个方法。

可以清晰看到当值范围在IntegerCache.low与IntegerCache.high也就是-127到128之前,新建的Integer对象都是从缓存里面取的。
@Test
public void testInteger() {
Integer i = 130;
Integer j = new Integer(100);
Integer x = 100;
Integer z = 130;
System.out.println((i == z) + "\n" + (x == j));
}
所以上面输出是false、false。至于为什么要引入包装类,我想应该可以这么理解:java是面向对象的一种语言,将基本类型包装成对象就可以让有对象类的一些操作,虽然包装类对象是不能被继承。(因为被final修饰),但是我们应用对象,正是因为面向对象的几个特征:封装、继承、多态、抽象。这也是面向对象的核心吧。
博主面试JavaSE基础时,公司常考察基本数据类型和包装类型的使用。介绍了Java 8种基本数据类型,包括整数、浮点、字符和布尔类型,还提及默认类型。分享了int最大值加1的面试题,以及包装类型的特点和Integer缓存的面试考点。
463

被折叠的 条评论
为什么被折叠?



