java面试之基本数据类型和包装类型的区别

简介

本人最近找工作,在面试javase基础这里,有很多公司还是喜欢考察基本数据类型和包装类型的使用情况,重点就是考察日常生活中对数据类型的选定还有使用场景做考察,比如问基本数据类型的占几个字节,取值范围多少、基本数据类型默认以及数据类型隐式转化等问题。

基本数据类型

java是一种强类型语言,所以定义一个变量需要声明变量的数据类型,java一共提供了8种数据类型,其中整数类型有byteshortintlong,以及2种浮点类型:floatdouble,Unicode编码的字符单元类型char,以及表示真假的boolean类型。

  • 整数类型
类型存储字节
byte1个字节
short2个字节
int4个字节
long8个字节

需要注意的是如果没有制定类型整数类型默认值类型是int

  • 浮点型
类型存储字节
float4个字节
double8个字节

默认情况下浮点型默认是double类型,因为double的数值精度是float的两倍。

  • char类型
    char类型表示单个字符,通常用来表示字符常量。
  • boolean类型
    boolean类型有两个值,false和true。

面试题

  1. int的最大值加1会发送什么结果?
    这个是遇到很有意思的面试题,最开始我回答了一个可能会造成溢出,报错什么的。很遗憾面试官说不对,所以面试后特地写个测试方法看看到底会发送什么?
    《java面试之基本数据类型和包装类型的区别》
    运行结果是true。
    这大概是我遇到最有意思的面试题了,因为当时对这块最大值溢出这块并不是很熟悉。所以这道题也并没有回答好。

包装类型

由于基本数据类型属于局部变量表,也就是存储在方法区上。而在java5后引入了包装对象,即基本数据类型有着对应的包装对象类型。包装对象是不可变的,一旦构造了包装对象,就不能改变包装的值,同时包装类对象还是final修饰的,所以这些包括类没有子类。

类型对应包装对象
intInteger
longLong
floatFloat
doubleDouble
shortShort
byteByte
charCharacter
booleanBoolean

面试题

包装类型最常见就是考察Integer的一个位于-128和127的一个缓存,通过源码我们可以清晰看到这一点,
一个就是int类型到Integer转变其实是调用了Integer.valueOf这个方法。
《java面试之基本数据类型和包装类型的区别》
可以清晰看到当值范围在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修饰),但是我们应用对象,正是因为面向对象的几个特征:封装继承多态抽象。这也是面向对象的核心吧。

    原文作者:Galen-gao
    原文地址: https://blog.csdn.net/javaee_gao/article/details/92851406
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞