首页 > 编程语言 >JavaGuide--基础篇

JavaGuide--基础篇

时间:2023-01-28 18:15:27浏览次数:62  
标签:BigDecimal -- 浮点数 基础 System JavaGuide println 拷贝 out

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

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。

Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据
记住:所有整型包装类对象之间值的比较,全部使用 equals 方法比较。

如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。

两种浮点数类型的包装类 Float,Double 并没有实现缓存机制。

为什么浮点数运算的时候会有精度丢失的风险?

浮点数运算精度丢失代码演示:

float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999905
System.out.println(a == b);// false

为什么会出现这个问题呢?

这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。

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

BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");

BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);

System.out.println(x); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */

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

基本数值类型都有一个表达范围,如果超过这个范围就会有数值溢出的风险。

在 Java 中,64 位 long 整型是最大的整数类型。

long l = Long.MAX_VALUE;
System.out.println(l + 1); // -9223372036854775808
System.out.println(l + 1 == Long.MIN_VALUE); // true

BigInteger 内部使用 int[] 数组来存储任意大小的整形数据。

相对于常规整数类型的运算来说,BigInteger 运算的效率会相对较低。

对象的相等和引用相等的区别?

对象的相等一般比较的是内存中存放的内容是否相等。
引用相等一般比较的是他们指向的内存地址是否相等。

接口和抽象类有什么共同点和区别?

共同点 :
  • 都不能被实例化。
  • 都可以包含抽象方法。
  • 都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。
区别 :
  • 接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。
  • 一个类只能继承一个类,但是可以实现多个接口。
  • 接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。

深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

  • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
  • 深拷贝 :深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
    image

标签:BigDecimal,--,浮点数,基础,System,JavaGuide,println,拷贝,out
From: https://www.cnblogs.com/chihaoyuIsnotHere/p/17071016.html

相关文章

  • ethcat开发记录 一
    一、方案1、移植开源方案SOEM2、专用芯片二、SOEM移植(一)硬件stm32f407,168MPHY:LAN8720A (ii)Pointstonote1,thePHYaddressoftheLAN8720problem.2,......
  • 226. 反转二叉树
    问题描述https://leetcode.cn/problems/invert-binary-tree/description/解题思路没啥好说的,python的交换简单极了。代码#Definitionforabinarytreenode.#cl......
  • B Arrange Your Balls (agc059)
    B-ArrangeYourBalls(agc059)tag:构造思维欧拉序题目链接题意:给出一堆小球,小球带有颜色,让你把小球排成一个环,若相邻两个小球颜色不同,则功德加1,问你如何按排使得贡......
  • 创建一个模板解析的功能函数
    第一步:生成目录结构config_file|_templates||_nginx.conf.j2|_nginx.conf第二步:写一个用于解析模板的函数fromjinja2importPackageLoader,Environmentdefj2(......
  • phpstudy后门文件md5
    php5.2.17正常php5.2.17版本对应扩展文件:php_xmlrpc.dllmd5码:8d3478e98eea61730d1522425e055db8后门MD5:0F7AD38E7A9857523DFBCE4BCE43A9E9php5.4.45正常......
  • 大公司为什么禁止SpringBoot项目使用Tomcat?
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • Hello World!
    1.下面图解释得挺清楚的/bin/echo"HelloWorld"//要执行的命令放红色区域那儿例1:打印HelloWorld  例2:ls查看目录文件 ......
  • Tarjan 算法 (图连通性)
    1.割边和割点首先我们dfs一遍构造出dfs树并排出dfn序.显然这棵树没有横叉边.考虑割边的形成条件.显然割边只能是树边,因为非树边会和对应的树上的路径组成环.......
  • ethcat开发记录 二
    SOEM移植到stm32f407+LAN8720硬件上的注意点1、LAN8720的PHY地址问题。2、LAN8720芯片在上电后要对复位引脚操作。3、使能LAN8720的混杂模式,在新的HAL库里,这个设置包含......
  • Harbor 入门指南
    Harbor介绍Harbor是由VMware开源的一款云原生制品仓库,Harbor的核心功能是存储和管理Artifact。Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和......