Java基础:数据类型会考什么?

这篇具有很好参考价值的文章主要介绍了Java基础:数据类型会考什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文列举一些关于Java基础的数据类型相关考点,方便以后复习查看

  • Java 中的哪几种基本数据类型了解么?它们的默认值和占用空间大小知道不? 说说这八种数据类型对应的包装类型
  • 基本类型和包装类型的区别?

  • int 和 Integer 的区别

  • 为什么要有包装类型 ? 

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

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

  • 在哪些场景下,Java会自动拆装箱呢 ? 
  • 自动拆装箱会带来什么问题呢 ?
  • 遇到过自动拆箱引发的NPE问题么 ?
  • String 怎么转成 Integer 的?原理?

  • Java 中的哪几种基本数据类型了解么?它们的默认值和占用空间大小知道不? 说说这八种数据类型对应的包装类型

Java一共有八种数据类型分别为 byte short int long float double char boolean.

默认值 : byte-0 ,int-0 ,short-0, long-0L, float- 0.0f, double-0.0d char- '\u0000' , boolean-false

占用空间大小 : byte -1字节,short-2字节,int-4字节,long-8字节,float-4字节,double-8字节,char-2字节boolean-不确定.

对应的包装类型 : byte - Byte,int-Integer,short-Short,long-Long,float-Float,double-Double,boolean-Boolean.

Java基础:数据类型会考什么?

  • 基本类型和包装类型的区别? 

默认值 : 基本类型都有自己的默认值,包装类型的默认值都是null

用于泛型 : 基本类型不能用于泛型,包装类可以用于泛型

存储区域 : 如果基本类型用于成员变量那存放在堆中,用于局部变量或者方法参数就会存放在Java虚拟机栈中. 而包装类型是对象类型(引用类型) 存放在堆中

占用空间 : 基本数据类型存放的数值都是在栈中,而包装类型在栈中存储对象的引用并且指向队中的对象, 相比于基本数据类型来说,包装类型要占用更多的内存空间

变量的比较不同 : 对于==来说,如果是基本数据类型比较的是值,如果是引用数据类型(包装类型)比较的是两个变量的地址是否相等,对于equals来说,如果引用类型没有重写equals与==一样,如果重写了比较的是内容-->包装类一般都默认重写了equals,建议引用类型(对象类型)使用equals比较.基本数据类型使用==比较

  • int 和 Integer 的区别

默认值 : int默认值为0,Integer默认值为null

泛型 : int不能用于泛型,Integer是包装类型可以用于泛型

数据类型区别 : int是基本数据类型,Integer是包装类型

存储方式不同 : int类型直接存放在Java虚拟机栈中的局部变量表中.而Integer类型属于对象类型,对象的实例都是存在于堆中的.相比于对象类型,基本类型占用的空间较小

实例化方式不同 : Integer需要实例化,int不需要

变量的比较不同 : 基本类型的比较相等使用==,包装类型使用equals比较的才是内容

  • 为什么要有包装类型 ? 

因为Java是属于面向对象的编程语言,很多地方都需要使用对象而不是基本数据类型,就比如Java集合类中 不允许将基本数据类型放进去,因为集合的容器要求元素是Object类型;

所以为了让基本数据类型也有面向对象特征,就出现了包装类型.相当于对基本数据类型做了一个包装,使其具有对象的性质,并添加了属性和方法,丰富了基本类型的操作.

基本数据类型都有对应的包装类型,两者可以进行互相转化,这个过程叫做拆箱和装箱.

  • 基本类型和包装类怎么进行选择呢 ? 

 阿里巴巴Java开发手册是这么说的Java基础:数据类型会考什么?

这里注意的是POJO类就是简单Java对象.

所以建议POJO类(Java对象)属性必须使用包装数据类型. 推荐所有的局部变量使用基本数据类型.

原因如下 :

很多业务场景下,对象的某些属性没有赋初始值,我们就希望它是NULL,如果给出赋一个初始值就会出现问题.

假设一个场景 :

我们现在要做一个扣费系统,需要专门调一个外部接口来计算 "费率",使用公式 金额*费率 得出花费的费用,然后根据这个计算结果进行扣费.

如果扣费系统出现了异常,费率就会返回一个默认值,如果是Double类型就返回null,就会直接中断程序不在往下执行,如果是double类型则返回0.0,这样就导致得出计算结果为0后,直接扣费了,这样系统异常就无法感知了

但如果要单独对0进行判断,又会引发出问题,如果允许费率为0的情况下扣费呢 ? 这样系统就无法识别出这个0是正常情况还是异常情况. 

所以使用基本数据类型会让方案越来越复杂,使用包装类定义变量,通过异常可以阻断程序的运行,可以识别出线上问题,如果使用基本数据类型,系统无感知,可能不会报错,认为是无异常.

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

Java中大部分包装类型都实现了缓存机制

Byte,Short,Integer,Long实现了缓存机制,这四种包装类创建了在[-127,128]范围内的缓存数据.  对于Character 创建了[0,127]范围内的缓存数据. Boolean直接返回True或者false,

而Float,Double则没有缓存机制.

  • 缓存的作用是什么 ? 

缓存的作用就是提高性能和节省内存-通过使用相同的对象引用实现了缓存与重用,

会在第一次使用包装类型的时候需要额外的一定时间来初始化这个缓存,下次如果使用的数字在缓存的范围内,可以直接使用相同的对象,不用在重新创建新的包装类对象了.IntegerCache缓存内部是使用for循环从低到高的创建整数,并把这些整数存到一个整数数组里面

对于Integer类比较特殊,在Java6中可以通过Integer.IntegerCache.high来设置最大值,使得我们可以根据应用程序的实际情况来调整数值提高性能. Byte,Short,Long 缓存范围固定不能改变

Java基础:数据类型会考什么?

  • 那为什么 选择[-128,127]之间这个数值范围呢 ? 

因为这个数值范围是最被广泛使用的.在性能和资源之间做的一个权衡.

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

自动装箱 : 将基本数据类型自动转换为对应的包装类

自动拆箱 : 将包装类自动转换为对应的基本数据类型

Integer i = 10;//自动装箱
int n = i;//自动拆箱

Java基础:数据类型会考什么?

自动装箱的原理是使用包装类的valueOf()方法(比如Integer a = Integer.valueOf(10))

自动拆箱的原理是使用包装类的xxxValue()方法(比如 int b= Integer.intValue(a))

我们如果想使用包装类型的话建议使用valueOf因为这样如果用的数字在缓存范围内是直接从缓存中取,否则new是直接创建一个对象,没有利用缓存.没有节省内存.

  • Integer相关面试题
public static void main(String[] args) {
    //对象的比较强烈建议使用equals比较
    Integer in1= new Integer(127);//堆中
    Integer in2 = new Integer(127);//堆中
    System.out.println(in1==in2);//false (都是new的->两个不同的对象->地址不同)
    System.out.println(in1.equals(in2));//true (比较的是内容)

    //超过缓存范围不能重用对象
    Integer in3= new Integer(128);//堆中
    Integer in4 = new Integer(128);//堆中
    System.out.println(in3==in4);//false (都是new的->两个不同的对象->地址不同)
    System.out.println(in3.equals(in4));//true (比较的是内容)

    Integer in5= 128;//堆中
    Integer in6 = 128;//堆中
    System.out.println(in5==in6);//false (超过缓存范围不能重用对象)
    System.out.println(in5.equals(in6));//true  (比较的是内容)


    Integer in7= 127;//常量池中
    Integer in8 = 127;//常量池中
    System.out.println(in7==in8);//true (没有超出缓存范围可以重用对象)
    System.out.println(in7.equals(in8));//true (比较的是内容)


    Integer tt2 = Integer.valueOf(99);//常量池 利用的缓存
    int tt3 = 99;
    System.out.println(tt2 == tt3);// true
}
  • 在哪些场景下,Java会自动拆装箱呢 ? 
  1. 将基本数据类型放入到集合类中===>自动装箱(Integer.valueOf()方法)
  2. 包装类和基本数据类型大小比较时,先将包装类拆箱之后在进行比较.==>自动拆箱(xxxValue())
  3. 包装类的运算会被自动拆箱成基本数据类型进行运算
  4. 在使用三目运算符的时候,第二位,第三位操作数如果是基本类型和对象的时候其中对象就会被拆箱为基本数据类型.如果包装类对象为null,在自动拆箱的时候就会抛出NPE
  5. 在函数传参的时候,传参基本数据类型返回包装类==>自动装箱,传参包装类,返回基本数据类型==>自动拆箱
  • 自动拆装箱会带来什么问题呢 ? 
  1. 比较包装类型的时候不能简单的使用==,虽然-128,127范围内可以使用==,但是超出这个范围的数字还是需要equals
  2. 有些场景下,如果包装类对象为null,在自动拆箱的时候就会抛出NPE
  3. 如果一个for循环有大量的拆装箱动作,就会浪费很多资源.
  • 遇到过自动拆箱引发的NPE问题么 ? 

如果包装类对象为null,就会引发出NPE问题

  1. 比如数据库查询结果有可能查出为null,但使用基本数据类型接收就会触发自动拆箱就会NPE
  2. 在使用三目运算符的时候,第二位,第三位操作数如果是基本类型和对象的时候其中对象就会被拆箱为基本数据类型.如果包装类对象为null,在自动拆箱的时候就会抛出NPE
  • String 怎么转成 Integer 的?原理?

String 转成 Integer,主要有两个方法:

  • Integer.parseInt(String s)
  • Integer.valueOf(String s)

不管哪一种,最终还是会调用 Integer 类内中的parseInt(String s, int radix)方法.

public static int parseInt(String s, int radix)
                throws NumberFormatException
    {

        int result = 0;
        //是否是负数
        boolean negative = false;
        //char字符数组下标和长度
        int i = 0, len = s.length();
        ……
        int digit;
        //判断字符长度是否大于0,否则抛出异常
        if (len > 0) {
            ……
            while (i < len) {
                // Accumulating negatively avoids surprises near MAX_VALUE
                //返回指定基数中字符表示的数值。(此处是十进制数值)
                digit = Character.digit(s.charAt(i++),radix);
                //进制位乘以数值
                result *= radix;
                result -= digit;
            }
        }
        //根据上面得到的是否负数,返回相应的值
        return negative ? result : -result;
    }

Java基础:数据类型会考什么?

使用一个数字累减,然后最后取反.

参考 :

Java 面试指南 | JavaGuide(Java面试+学习指南)

<<深入理解Java核心技术>>

面试官:int和Integer有什么区别?为什么要有包装类? - 掘金

面渣逆袭必看,面试题八股文JavaSE、Java 集合框架、Java 并发编程、JVM、Spring、Redis、MyBatis、MySQL、操作系统、计算机网络、RocketMQ、分布式👍 | Java程序员进阶之路文章来源地址https://www.toymoban.com/news/detail-417772.html

到了这里,关于Java基础:数据类型会考什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法基础】java基础——基本结构、数据类型、表达式、语句

    Java程序的基本结构:         一段Java程序或者一个静态库,会用到下面7种语法         1、原始数据类型:在计算机程序中精确到定义整数、浮点数、布尔值等         2、语句:通过创建变量并对其赋值,它们能够被组合为类似数学公式定义的表达式         3、数组  

    2024年01月16日
    浏览(44)
  • JAVA包装类和基本数据类型------JAVA入门基础教程

    public class WrapperTest {     public static void main(String[] args)     {         int i1 = 10;         Integer i11 = new Integer(i1);         System.out.println(i11);         float f1 = 12.3F;         f1 = 32.2F;         Float ff1 = new Float(f1);         System.out.println(ff1);         String s1 = \\\"32.1\\\";         F

    2024年02月02日
    浏览(43)
  • java自动化-03-04java基础之数据类型举例

    1、需要特殊注意的数据类型举例 1)定义float类型,赋值时需要再小数后面带f 2)定义double类型,赋值时直接输入小数就可以 3)另外需要注意,float类型的精度问题,会有自动保存小数点后几位的问题,如下图 4)boolean类型的值只有true和false 5)char类型的变量进行赋值时需要

    2024年04月11日
    浏览(41)
  • Java基础篇_1.2——保留关键字、基本数据类型、基本数据类型之间的转换

    目录 一、保留 二、Java的基本数据类型 三、引用数据类型  四、基本数据类型间的转换  隐含强制类型转换 数值之间的合法转换 Java该语言是用 Unicode 字符集编写的。 Java是预先定义的具有特别意义的标识符,也被称为Java保留字,Java不能用作变量名、方

    2024年02月14日
    浏览(54)
  • 〔002〕Java 基础之语法、数据类型、进制转换、运算符

    注释: 是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的 注释分为 单行注释 和 多行注释 ,注释的内容并不会被编译,所以 不会影响 代码的运行 单行注释通过 // 进行标注,只能注释一行 多行注释通过 /* 注释内容 */ 进行标注,可以注释多

    2024年02月05日
    浏览(79)
  • Android Java代码与JNI交互基础数据类型转换(三)

    🔥 Android Studio 版本 🔥  🔥 基础类型数据的转换 🔥 定义传递基础数据类型到Native的JNI接口函数 Native层创建callNativeInt 提供给Java调用 CMakeLists.txt 文件下配置动态库名称  添加 target_link_libraries 配置 Java调用Native层函数   运行打印日志 Java调用Native分别打印基础类型数据  下

    2024年02月13日
    浏览(43)
  • 第二章 02Java基础-数据类型、标识符、键盘录入

    今天我们学习Java基础,数据类型、标识符、键盘录入 1.数据类型大体上可以分为两类,一类是基本数据类型,另外一类是引用数据类型。今天我们学习基本数据类型。 2.基本数据类型可以分为四类八种,整数(byte short int long)、浮点数(float double)、字符(char)和布尔(

    2024年02月06日
    浏览(55)
  • 初识Java篇(JavaSE基础语法)(1)(数据类型+运算符)

     个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 目录 前言:  初识Java  运行Java程序 注释 标识符 数据类型与变量  字面常量 数据类型 变量 类型转换  类型提升  字符串类型  运算符 算术运算符  关系运算符  逻辑运

    2024年03月24日
    浏览(51)
  • 【Java基础教程】(三)程序概念篇 · 上:探索Java编程基础,注释、标识符、关键字、数据类型~

    掌握Java中标识符的定义; 掌握Java中数据类型的划分以及基本数据类型的使用原则; 掌握Java运算符的使用; 在编写程序时,为了提高程序的可维护性,我们可以在代码中添加注释。 注释是一种说明性的文字,不会被编译器编译执行 。 Java提供了三种注释形式: // :单行注

    2024年02月12日
    浏览(160)
  • 01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

    目录 环境搭建和基础知识  什么是JRE: 什么是JDK: 基础数据类型  分支选择if else switch和c一毛一样 for和while循环还有数组基本和c一样 封装 函数调用、传参、命名规范、数组新命名规范 java输入Scanner scanner = new Scanner(System.in); 类的创建和使用以及封装修饰符  构造方法:含义、

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包