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  但是其效率会相对较低

 

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

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

相关文章

Win10 系统中用户环境变量和系统环境变量是什么作用和区别?

环境: Win10专业版 问题描述: Win10 系统中用户环境变量和系统环境变量是什么作用和区别? 解答: 在Windows 10系统中,用户环境变量和系统环境变量是两个不同的环境变量,它们具有不同的作用和区别 1.用…

双向链表C语言版本

1、声明链表节点操作函数 linklist.h #ifndef LINKLIST_H__ #define LINKLIST_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h>//#define TAIL_ADD #define HEAD_ADD typedef int LinkDataType; // 构造节点 struct LinkNode {LinkDataTy…

【Debian】报错:su: Authentication failure

项目场景&#xff1a; 今天我重新刷了一个debian系统。 系统版本&#xff1a; # 查看系统版本 lsb_release -a 我的系统版本&#xff1a; No LSB modules are available. Distributor ID&#xff1a;Debian Description: Debian GNU/Linux 12 &#xff08;bookworm&#xff…

目录启示:PHP 与命名空间的声明

文章目录 参考环境命名空间概念版本支持影响范围 全局命名空间概念魔术常量 \_\_NAMESPACE\_\_声明全局命名空间 声明命名空间为空间命名命名规则核心命名空间 子命名空间的声明在同一文件中定义多个命名空间无括号命名空间声明有括号命名空间声明禁止混合使用推荐使用有括号命…

统信UOS1060设置自动关机01

原文链接&#xff1a;统信UOS1060设置自动关机01 hello&#xff0c;大家好啊&#xff0c;今天给大家介绍一篇如何在统信UOS 1060上实现自动关机的文章&#xff0c;本篇文章采用两种方式&#xff0c;第一种使用的是crontab定时任务的方式&#xff0c;第二种是使用at命令的方式&a…

服务器系统和普通系统的区别

随着信息技术的迅猛发展&#xff0c;服务器系统和普通系统在计算机领域扮演着重要的角色。虽然它们都是计算机操作系统的一种形式&#xff0c;但在设计、功能和用途上存在着显著的区别。本文将以服务器系统和普通系统的区别为方向&#xff0c;探讨它们之间的特点和应用。 首先…

实体解析实施的复杂性

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

natapp内网穿透-将本地运行的程序/服务器通过公网IP供其它人访问

文章目录 1.几个基本概念1.1 局域网1.2 内网1.3 内网穿透1.4 Natapp 2.搭建内网穿透环境3.本地服务测试 1.几个基本概念 1.1 局域网 LAN&#xff08;Local Area Network&#xff0c;局域网&#xff09;是一个可连接住宅&#xff0c;学校&#xff0c;实验室&#xff0c;大学校…

2核4G游戏服务器推荐(阿里云/腾讯云/华为云)

2核4G游戏服务器推荐&#xff0c;首选腾讯云2核4G5M带宽轻量应用服务器218元一年、阿里云2核4G4M带宽轻量应用服务器297元一年&#xff0c;华为云2核2G3M云耀L服务器95元一年&#xff0c;阿腾云来详细说下2核4G游戏服务器推荐配置大全&#xff1a; 目录 2核4G游戏服务器推荐 …

vue axios封装

Vue.js 是一款前端框架&#xff0c;而 Axios 是一个基于 Promise 的 HTTP 请求客户端&#xff0c;通常用于发送 Ajax 请求。在Vue.js开发中&#xff0c;经常需要使用 Axios 来进行 HTTP 数据请求&#xff0c;为了更好的维护和使用 Axios&#xff0c;我们可以对其进行封装。下面…

前端 js导出excel

一、导出效果 二、导出代码 download() {let data [{name: aaaa,age: 10,address: 广东,phone: 1,wechart: 1},{name: bbbb,age: 11,address: 广西,phone: 2,wechart: 2},{name: cccc,age: 12,address: 山东,phone: 3,wechart: 3}]if (!data.length) {this.$Message.warnin…

暴力递归转动态规划(九)

题目 题有点难&#xff0c;但还挺有趣 有一个咖啡机数组arr[]&#xff0c;其中arr[i]代表每一个咖啡机冲泡咖啡所需的时间&#xff0c;有整数N&#xff0c;代表着准备冲咖啡的N个人&#xff08;假设这个人拿到咖啡后喝完的时间为0&#xff0c;拿手里咖啡杯即变空&#xff09;&a…

postman和jmete接口测试的用法与区别

前言 前阶段做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xff0c;所以今天我们就来谈谈一大…

【Qt】字体更大的富文本

使用size属性只能生成7个等级的字号&#xff0c;超过7的都视作为7。 当需要更加夸张的字号时则需要使用style属性&#xff0c;除此之外利用该属性可以生成更加逆天丰富的样式&#xff0c;(style属性是CSS样式表。 稍微跑题一下&#xff1a;似乎有安全性的考量&#xff0c;不少…

Java延迟队列——DelayQueue

Java延迟队列——DelayQueue DelayQueue的定义 public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E>DelayQueue是一个无界的BlockingQueue&#xff0c;是线程安全的&#xff08;无界指的是队列的元素数量不存…

如何快速区分GPT-3.5 与GPT-4?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

【Qt】对话框QDialog

文章目录 **对话框**QDialog**基本概念**对话框分类标准对话框自定义消息框模态对话框非模态对话框 案例&#xff1a;点击新建按钮弹出对话框消息对话框其它标准对话框 对话框QDialog 基本概念 对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组…

【uniapp微信小程序+springBoot(binarywang)

uniapp前端代码 <template><view><page-head :title"title"></page-head><view class"uni-padding-wrap"><view style"background:#FFF; padding:50rpx 0;"><view class"uni-hello-text uni-cente…

pycharm2020无法打开,点击无反应

pycharm 2020 无法打开&#xff0c;点击无反应&#xff0c;今天我碰到这现象&#xff0c;总结大体原因 C:\Users\ygw\AppData\Roaming\JetBrains &#xff08;删除该目录即可&#xff0c;一般由于升级安装 或 安装两个不同版本 会存在老旧文件影响导致&#xff09;