Java基础知识 | 常见面试题(上):基本数据类型

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。

相关内容

Java基础知识 | 常见面试题(上):基础概念和常识

Java基础知识 | 常见面试题(上):基本语法

自测篇

3.1 Java 中的几种基本数据类型了解么?
3.2 基本类型和包装类型的区别?
3.3 包装类型的缓存机制了解么?
3.4 自动装箱与拆箱了解吗?原理是什么?什么是自动拆装箱?
3.5 为什么浮点数运算的时候会有精度丢失的风险?为什么会出现这个问题?
3.6 如何解决浮点数运算的精度丢失问题?
3.7 超过 long 整型的数据应该如何表示?

答案篇

  1. Java 中的几种基本数据类型了解么?

Java有八种基本数据类型:byte、short、int、long、float、double、char、boolean。

整型数据类型(按照存储数值大小排序):byte、short、int、long

  • 常用的数据类型为int

  • byte是取正负值区间长度为2的八次方[-128,127],short与char相同是其两倍;

    • 为什么是2的八次方→一个byte表示一个字节 = 八位数

  • int则是short的两倍,long又是int的两倍,同时long类型赋值要对数值后面+l。

    • 为什么long赋值对应要加l?

    • 因为Java会默认将其作为int类型,但long是64位,将会导致32位的int无法存储,所以为了避免出现这种情况要加上l表示long类型。

字符数据类型:char

  • 基本语法 char ch = {'a'};

  • 只能存储单个字符;

浮点型数据类型:float、double

  • 默认为double类型,对于float类型,要在数值后面加f;

布尔型数据类型:boolean

Java中的基本数据类型内存基本不会发生大波动地改变,这也是Java可移植性强的原因之一。

  1. 基本类型和包装类型的区别?

在学mybatis框架时,习惯性使用基本类型定义变量,在使用SQL语句动态操作时,往往会因为基本类型有默认值,而导致每次获取的id即使没有赋值,也会默认等于0,导致动态操作检索id = 0的情况,进而导致操作错误。

  • 所以希望定义的数据类型没有默认值时可使用包装变量,而基本变量都其默认值。

因为基本类型无需创建对象就能够直接使用,这是它效率高的原因之一;

  • 基本类型高效的原因还因为其存储方式固定,不会产生额外的内存;

但其缺点是不方便使用不断更新地对象新特性方法;

  • 而包装类型的出现就是可以让这些基本类型能够转换成对象使用对象新特性方法(泛型)and方便地方法操作基本数据类型,但缺点则是需要额外的内存开销创建对象。

  1. 包装类型的缓存机制了解么?

包装类型的缓存机制主要针对于常用的包装类型,目的是减少对象创建和内存占用。像整型包装类:byte、short、int和long都有缓存机制,存储值范围[-128,127],当直接赋值区间在这个范围内,则无需再创建新内存空间;使用new则是直接创建新的内存空间;

包装类属于引用类型,其实例对象变量存储堆中,因为堆存储所有实例对象,所有当基本变量在类中方法外创建时,也是存储在堆中。但包装类的地址存储栈中,而基本变量在方法内创建时属于局部变量则存储在栈中(引用类型不适用)。当基本变量属于静态变量时,则存储在方法区内。

  1. 自动装箱与拆箱了解吗?原理是什么?什么是自动拆装箱?

自动装箱指的是在java1.8之后,遇到使用对象的方法,基本类型能够自动转换成包装类型使用;

  • 装箱本质上是调用了valueOf方法,拆箱则是xxValue方法

拆箱则是针对包装类型使用,将其自动拆箱为基本类型,提高效率;但要避免不必要地频繁装箱拆箱降低效率;

  1. 为什么浮点数运算的时候会有精度丢失的风险?为什么会出现这个问题?

计算机本质上是二进制,而无限的小数or超过数据类型小数范围值只能被截断就会造成精度损失,像十进制的0.2就无法转换成二进制。

  1. 如何解决浮点数运算的精度丢失问题?

更大精度的数据类型

BigDecimal类型能够解决float浮点数丢失精度的问题,所以在实际业务中涉及钱或其他重要计算都会使用。

定义误差范围:若超出误差给予说明,若在可承受范围则能够在保持性能下实现业务;

  1. 超过 long 整型的数据应该如何表示?

问题和理解大部分来源为Guide哥的Java面试指南,有需要的可自行检索加入其星球获得。 

你可能感兴趣的:(计算机基础,java,面试)