当前位置: 首页 > news >正文

Java面试题-Java核心基础-第三天(基本数据类型)

目录

一、Java的基本数据类型了解吗?

二、基本类型和包装类型的区别

三、包装类型的缓存机制了解吗?

四、自动拆箱和自动装箱了解吗?

五、为什么浮点数在运算的时候会有精度损失的风险?

六、如何解决浮点数在运算时存在的精度损失问题?

七、超过long的数据如何保存


一、Java的基本数据类型了解吗?

数值型:

     整数型:byte、short、int、long

     浮点型:float、double

布尔型:true、false

字符型:char

那么各种类型所占字节,能表示的范围了解吗?

byte:1 byte  -128 - 127 

short: 2 byte -2^15 - 2^15-1

int : 4byte -2^31 - 2^31-1

long : 8byte -2^63 - 2^63-1

布尔型的话 一般一个字节 但可能JVM会存在优化不一定是一个字节

char : 2byte 0 - 2^16-1

二、基本类型和包装类型的区别

五个方面

1. 就用途来说

包装类符合面向对象的特征  可以用于泛型  里面可以定义属性和方法来更好的操作数据

2. 存储上

基本类型基本都存在栈上面  当然如果是成员变量非static的就存在于堆上 如果是static的就存在于方法区中

而对应包装类型  因为是对象类型 那么都基本存在于堆中  即使方法的形参是包装类型与基本类型有些区别

3. 占有内存大小

基本类型一般占用空间较小,而包装类型则占用空间较大

4. 默认值

基本类型的默认值有多种  而包装类型的默认值就为null

5. 比较方式

基本类型可以使用==进行比较  而包装类型需要使用  equals方法进行比较

三、包装类型的缓存机制了解吗?

对于一些数值型的包装类型存在缓存机制

其基本作用是为了提高性能,避免重复创建对象

比如说 Byte、Short、Integer、Long都有其缓存值 (-128 - 127) 

Character (0 - 127) 

注意:

1. Float和Double没有实现缓存机制

2. 对于其包装类型的比较使用equals方法进行比较

例子:

Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);

这个的结果返回 false 原因是因为上面是在缓存的范围内 可以直接使用缓存对象  而下面是用的自己new出来的 全新的 因此不一样

而如果改成下面这样:

Integer i1 = 40;
Integer i2 = 40;
System.out.println(i1 == i2);// 输出 true

结果为true  这是因为都是缓存对象

这也就告诉我们其实也就是使用 上面的那一个例子使用  ==比较是正确的,其他都不行

因此包装类之间的比较不要使用==进行比较 而需要使用equals进行比较 

四、自动拆箱和自动装箱了解吗?

自动拆箱和自动装箱 是包装类和基本类型之间的相互转换

拆箱的底层是调用   对象.xxxValue()方法  Integer i = new Integer(3)   int i1= i.intValue()

装箱的底层是调用   XXX.valueOf方法  Integer.valueOf(123)

五、为什么浮点数在运算的时候会有精度损失的风险?

因为这是底层在存储浮点数的时候,只能将得到的二进制进行截取

就比如说下面这个例子:

// 0.2 转换为二进制数的过程为,不断乘以 2,直到不存在小数为止,
// 在这个计算过程中,得到的整数部分从上到下排列就是二进制的结果。
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0(发生循环)
...

发生了循环,所以没办法只能截断  而截断的后果就是精度的损失

六、如何解决浮点数在运算时存在的精度损失问题?

使用 BigDecimal这个类来进行运算 

使用它需要注意以下几点:

1. 创建对象不要使用  double构造器的方式  而是使用   字符串构造器的方式或者是 BigDecimal.valueOf()的方式  底层调用了Double的toString方法,对double实际能表达的精度值进行了截断

2. 比较不要使用equals方法

因为这个还会比较精度 0.1 和 0.10结果为false  应该使用compareTo方法

3. 对于将浮点数进行保留几位小数

可以使用setScale方法  一般来说保留的规则使用  BigDecimal.ROUND_HALF_UP规则  这是四舍六入五看奇偶规则 5的前一位是偶数那么就入 

另外还有常见的几种规则:

ROUND_UP 就是常规的四舍五入  ROUND_DOWN 就是取小的  负数还是取大的

CEILING 天花板 反正取大的   FLOOR 反正取小的

七、超过long的数据如何保存

使用BigInteger  但是其效率会相对较低

 

相关文章:

Java面试题-Java核心基础-第三天(基本数据类型)

目录 一、Java的基本数据类型了解吗? 二、基本类型和包装类型的区别 三、包装类型的缓存机制了解吗? 四、自动拆箱和自动装箱了解吗? 五、为什么浮点数在运算的时候会有精度损失的风险? 六、如何解决浮点数在运算时存在的精度…...

Bean容器里的单例是根据什么识别它是同一个类呢?(比如容器里创建了A类,再去用这个A类的时候,Bean容器怎么知道这个就是A类?)

Spring容器中的Bean的识别主要依赖于Bean的名称(ID)和类型。以下是详细解释: Bean的名称(ID):每个Bean在Spring容器中都必须有一个唯一的名称(ID)。这个名称通常在配置文件中、Java…...

简述 happens - before 八大规则

“Happens-Before” 是Java内存模型中的概念,用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则,哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则: 程序顺序规则(Program Order Rule&am…...

windows flask 多进程高并发

最近在做的一个项目,需要将十几个python函数封装程flask服务供外界调用,每个函数之间没有什么关系,相互独立。虽然感觉不是很难,但因为用的windows系统,遇到的坑比较多,在此一一总结一下。 flask偶尔出现卡…...

【设计模式】十、组合模式

文章目录 案例组合模式基本介绍类图代码 组合模式在 JDK 集合的源码分析组合模式的注意事项和细节 案例 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如…...

React知识点系列(8)-每天10个小知识

目录 1. 在 React 中,什么是受控组件和非受控组件?请解释一下它们之间的区别和适用场景。2. 如何使用 React 的 useReducer Hook 来管理组件状态?请描述一下 useReducer 的工作原理和适用场景。工作原理:适用场景: 3. …...

rust注释

一、普通注释 // 这是第一种注释方式/* 这是第二种注释方式 */ /* 多行注释 多行注释 多行注释*/二、文档注释 ///外部行文档注释。为接下来的项生成帮助文档 //! 内部行文档注释。为注释所属于的项生成帮助文档/**...*/外部块文档注释。为接下来的项生成帮助文档 /*!...*/内…...

【Java学习之道】GUI开发的基本概念

引言 在这一章,我们将一起走进Java的图形用户界面(GUI)开发的世界。在你阅读完这篇文章后,你将能够了解什么是GUI,以及如何使用Java进行GUI的开发。 一、什么是GUI 首先,让我们来解答一个许多初学者都会…...

Docker部署gitlab_ce(避坑版---社区版)

1 下载docker 2 下载gitlab镜像 3 运行 4 进入容器内部修改 5 在浏览器里访问 6 修改root密码(如果忘记请修改) 1 下载docker # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2# 设置yum源 yum-config-manager --add-repo https…...

数据仓库DW-理论知识储备

数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能,最后得出一些有用的数据,一些目标数据来使用。 采集来自不同源的数据,然后对这些数据进行分析和计算得出一些有用的指标,提供数据决策支持。 数据的来源有&#xff…...

SpringBoot 如何优雅的停机

这里写目录标题 1 介绍2 使用2.1 开启 hook2.2 禁用 hook 3 手动指定 hook 1 介绍 SpringBoot 如果需要使用hook则需要开启spring.main.register-shutdown-hooktrue(默认为true) 如果使用kill -9则不会出发JVM的hook,kill可以正常触发hook server:port: 8080shutd…...

详细教程:Postman 怎么调试 WebSocket

WebSocket 是一个支持双向通信的网络协议,它在实时性和效率方面具有很大的优势。Postman 是一个流行的 API 开发工具,它提供了许多功能来测试和调试 RESTful API 接口,最新的版本也支持 WebSocket 接口的调试。想要学习更多关于 Postman 的知…...

互联网Java工程师面试题·Java 并发编程篇·第五弹

目录 52、什么是线程池? 为什么要使用它? 53、怎么检测一个线程是否拥有锁? 54、你如何在 Java 中获取线程堆栈? 55、JVM 中哪个参数是用来控制线程的栈堆栈小的? 56、Thread 类中的 yield 方法有什么作用? 57、…...

mysql与oracle分页的有什么区别

Java面试:mysql与oracle分页的有什么区别 相信许多人在日常工作中都会用到分页,比如日常查询数据量太大,而我们只需要其中的几条即可,所以这时就会去使用分页去查询,今天主要就mysql与oracle的分页进行分析。 MySQL 分…...

华为云云耀云服务器L实例评测|华为云耀云服务器L实例docker部署及应用(七)

八、华为云耀云服务器L实例docker、docker-compose安装及部署MySQL、Redis应用: 随着云原生、容器化、微服务、K8S等技术的发展,容器 docker 也逐渐在企业团队实践中大量的使用。它可以提供了一套标准化的解决方案,极大地提升了部署、发布、运…...

实体解析实施的复杂性

实体的艺术表现斯特凡伯克纳 一、说明 实体解析是确定数据集中的两条或多条记录是否引用同一现实世界实体(通常是个人或公司)的过程。乍一看,实体分辨率可能看起来像一个相对简单的任务:例如,给定一张人物的两张照片&a…...

MAKEFLAGS += -rR --include-dir=$(CURDIR)的含义

一、目的 在看uboot顶层Makefile文件时遇到这个代码不甚明白,故查找了一下资料以供大家学习 二、介绍 MAKEFLAGS -rR 表示禁止使用内置的隐含规则和变量定义;这个选项用于启用recursive make,使得Makefile目标可以调用其他Makefile目标&…...

maven问题与解决方案、部署

问题一、was cached in the local repository, resolution will not be reattempted until the update interval of idea中 Maven中Lifecycle时,能正常clean 和 install,但在idea的Terminal中mvn install出现: was cached in the local repo…...

【大数据】Hadoop MapReduce与Hadoop YARN(学习笔记)

一、Hadoop MapReduce介绍 1、设计构思 1)如何对付大数据处理场景 对相互间不具有计算依赖关系的大数据计算任务,实现并行最自然的办法就是采取MapReduce分而治之的策略。 不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算! …...

接口测试文档

接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为什…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...