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

news2024/9/24 9:23:22

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

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

  • int 和 Integer 的区别

  • 为什么要有包装类型 ? 

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

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

  • 遇到过自动拆箱引发的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.

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

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

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

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

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

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

  • int 和 Integer 的区别

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

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

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

存储方式不同 : int类型直接在内存中存储的是值类型,放在栈中,而Integer类型在内存中存放的是对象的引用,指向堆空间中的对象.

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

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

  • 为什么要有包装类型 ? 

Java是属于面向对象的编程语言,为了让基本数据类型也有面向对象特征,就出现了包装类型.(在 Java 中,万物皆对象,所有的操作都要求用对象的形式进行描述比如 hashCode() 获取哈希值,或者 getClass() 获取类等.), 基本数据类型都有对应的包装类型,两者可以进行互相转化,这个过程叫做拆箱和装箱.

包装类型可以在集合中使用(比如在使用ArrayList的时候泛型的参数里只能使用包装类型),而基本类型不能用于泛型.

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

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

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

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

  • 缓存的作用是什么 ? 

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

会在第一次使用包装类型的时候需要额外的一定时间来初始化这个缓存,下次如果使用的数字在缓存的范围内,可以直接使用相同的对象,不用在重新创建新的包装类对象了.

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

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

因为这个数值范围是最被广泛使用的.

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

自动装箱 : 把基本数据类型赋值给(转换)包装类型(将基本数据类型用对应的引用类型包装起来)

自动拆箱 : 将包装类型赋值给(转换)基本数据类型

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

自动装箱的原理是使用包装类的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
}
  • 遇到过自动拆箱引发的NPE问题么 ? 

稍后补充...

  • String 怎么转成 Integer 的?原理?

参考 :

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Parallels Desktop for Mac 适用于苹果 macOS 的 PD 虚拟机(安装使用详细教程)

简介 Parallels Desktop for Mac 是一款适用于苹果 macOS 操作系统的虚拟机软件&#xff0c;可以让用户在 Mac 上运行 Windows、Linux 等其他操作系统&#xff0c;同时也可以在虚拟机中安装其他软件和应用程序。Parallels Desktop for Mac 还提供了许多实用的功能&#xff0c;…

窗口看门狗(WWDG)实验

窗口看门狗 窗口看门狗&#xff08;WWDG &#xff09;通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 除非递减计数器的值在 T6 位&#xff08; WWDG -->CR 的第六位&#xff09;变成 0 前被刷新&#xff0c;看门狗电路…

ROS小乌龟话题改写--话题发布--话题订阅

创建小乌龟 roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key2&#xff1a;图显示&#xff1a; rqt_graphtest02_sub_pose 3&#xff1a;通过命令显示话题名消息信息 方法一获得&#xff1a; rostopic info /turtle1/cmd_vel方法二获得&#…

Linux 提权学习

提权的目的是获取 root 权限 root 权限可获取 shadow 文件中的密码 Hash&#xff0c;若内网环境中存在「账户/密码复用」的情况&#xff0c;可用于横向扩展 暴力破解 suid 提权 内核漏洞提权 定时任务提权 sudo 提权 第三方服务提权&#xff08;docker、mysql、redis、NFS提权…

量子退火Python实战(4):PyQUBO使用攻略 MathorCup2023加油!

文章目录 前言一、约束部分的QUBO怎么求&#xff1f;二、PyQUBO的输出结果怎么不是QUBO矩阵&#xff1f;三、我的建模太复杂了&#xff0c;可以不用PyQUBO吗&#xff1f;四、怎么构建sum&#xff08;x_1...x_i&#xff09; K的约束&#xff1f;总结 前言 提示&#xff1a;本教…

3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(上) | 达索系统百世慧®

基于3DEXPERIENCE单一数据源、实时多专业协同平台&#xff1b;传统CATIA建模附加全新CATIA柔性快速建模技术&#xff1b;CATIA原生概念建模仿真一体化模型&#xff1b;一模两用&#xff0c;快速建模与变更、多学科快速验证与自动优化、支持快速概念方案决策&#xff1b;仿真效率…

快手社招Java后端开发岗面试,被问麻了

社招面试是基于你的工作项目来展开问的&#xff0c;比如你项目用了 xxx 技术&#xff0c;那么面试就会追问你项目是怎么用 xxx 技术的&#xff0c;遇到什么难点和挑战&#xff0c;然后再考察一下这个 xxx 技术的原理。 今天就分享一位快手社招面经&#xff0c;岗位是后端开发&…

日常记录:天梯赛练习集L1-044 稳赢

题目&#xff1a; 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但是&#xff01;为了不让对方输得太惨&#xff0c;你需…

软件测试能干多久?测试员能干到多大年龄?

测试员可以工作多少年?大多数人认为软件测试是吃青春饭的工作。只能干到30岁&#xff0c;最长可达35岁。我经常听到这样的话&#xff0c;都让人倍感压力。今天&#xff0c;我们来谈谈这个老话题… 软件测试能干多久&#xff1f; 软件测试并没有明确的职业寿命限制&#xff…

【高项】项目的概念,项目管理基础与立项管理

【高项】项目的概念&#xff0c;项目管理基础与立项管理 文章目录1、什么是项目&#xff1f;项目的概念2、项目管理知识体系2.1 组织结构对项目的影响2.2 信息系统项目的生命周期2.3 单个项目的管理过程3、立项管理3.1 熟悉立项的流程&#xff08;申请书->可行性->评估-&…

【《C Primer Plus》读书笔记】第16章:C预处理器和C库

【《C Primer Plus》读书笔记】第16章&#xff1a;C预处理器和C库16.1 翻译程序的第一步16.2 明示常量&#xff1a;#define16.2.1 记号16.2.2 重定义常量16.3 在#define中使用参数16.3.1 用宏参数创建字符串&#xff1a;#运算符16.3.2 预处理器黏合剂&#xff1a;##运算符16.3.…

@SpringBootApplication详细分析

如下图 SpringBootApplication是springboot项目启动类的注解&#xff0c;也是程序的入口,本文就是具体解析一下这个注解到底做了什么 一.SpringBootApplication的构成 1.这个注解是一个组合注解&#xff0c;他是有三个注解合成的&#xff0c;对应图中的123步&#xff0c;而这三…

【HDR图像处理】HDR图像的色调映射 | python+opencv代码实现总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前提opencv知识1.1、opencv打开一般照片并且显示1.2、opencv打开HDR图像&#xff08;这里先不讲如何imshow&#xff09; 二、经典的色调映射技术以及opencv…

Web 攻防之业务安全:密码找回流程绕过测试.(利用链接跳到后面去)

Web 攻防之业务安全&#xff1a;密码找回流程绕过测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所…

MATLAB | 优化工具箱(optimization toolbox)改版后的live editor工具咋用

优化工具箱(optimization toolbox)改版后的live editor工具咋用&#xff1f;本来是不咋想讲这玩意的&#xff0c;但奈何问的人还不少&#xff0c;这里简单讲一下咋用哈。 很多人下了比较新版本MATLAB就顺手像往常一样点开了优化工具箱&#xff0c;但是熟悉的优化APP界面却并没…

网络安全学习路线,小白必备

前言&#xff1a; 趁着今天下班&#xff0c;我花了几个小时整理了下学习路以及我的学习心得&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在…

BPM流程引擎升级,让流程管理更简单!

BPM是Business Process Management的缩写&#xff0c;即业务流程管理。 它是一种以构造端到端的业务流程为中心&#xff0c;以持续提高组织业务绩效为目的的系统化方法。通常&#xff0c;BPM也指流程管理的信息化系统。 BPM对企业很多应用场景都有价值&#xff0c;总的来说&am…

Web 攻防之业务安全:验证码绕过测试.(修改数据包中 res_code 的值 实现绕过.)

Web 攻防之业务安全&#xff1a;验证码绕过测试. 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所提供…

【Linux系统管理进程,运行,挂起,杀死进程和crontab计划任务表的使用以及实验的心得体会】

实验 &#xff08;1&#xff09;显示本用户的进程&#xff0c;重定向到file1 top命令如果不加限制&#xff0c;默认是查看所有用户的进程情况top -u [用户名] 可以查看该用户名的所有进程 &#xff08;2&#xff09;显示本用户所有进程&#xff0c;重定向到file2 top命令如果…

扩展c盘时,如何删除恢复分区

目录 一、前言 二、操作步骤 一、前言 有没有和小编一样想要扩展自己c盘容量时遇到问题的&#xff1f; 就是发现c盘和自己扩展的容量之间有个恢复分区&#xff0c;主要是磁盘管理器那里还删不掉&#xff1f; 就不知道怎么办了&#xff0c;小编摸索了一下最终解决了现在分享…