1、介绍
Java语言提供了8种基本数据类型。分别是 byte、short、int、long、float、double、boolean、char。
String java基础字符 是对象,不属于基本数据类型
8种基本数据按类型分可以分为
4个 整数型:byte、short、int、long
2个浮点型:float、double
1个字符类型:char
1个布尔型:boolean
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
基本数据类型 "==" 比较都是值。
Boolean 《Java虚拟机规范》给出了4个字节,但还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
2、拆箱和装箱问题
拆箱和装箱
装箱就是自动将基本数据类型转换为包装器类型;使用方法。 拆箱就是自动将包装器类型转换为基本数据类型;使用方法。
上面提到,使用 去创建数据,其实是一个 过程, 源码如下:
如果值的范围在-128到127之间,它就从高速缓存返回实例。 否则 new 一个Integer对象。 就是一个装箱的过程了,装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能。 所以说最后是i 和 j 两个对象比较,内存地址不一样,结果就是false了。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
==的值比较问题
,只要和基本数据类型(即 int)比较,Integer就会调用拆箱成基本数据类型,你也可以理解为:当有基本数据类型,只比较值
,这两个是永远不会相等的,拆箱装箱只是针对基本数据类型的比较才有,Integer并不是基本数据类型,b、c两者存放的内存地址不一样,所以不相等。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
总结:
①、无论如何,Integer与new Integer不会相等。不会经历拆箱过程,因为它们存放内存的位置不一样。
②、两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。
③、两个都是new出来的,即两个new Integer比较,则为false。
④、int与Integer、new Integer()进行==比较时,结果永远为true,因为会把Integer自动拆箱为int,其实就是相当于两个int类型比较。
3、int 和 Integer
Integer 继承了Object类,是对象类型,有自己的属性和方法,是 int 的包装类。int是java基本数据类型。
Integer默认值null,int默认值 0。
int 可以直接做运算,Integer 不能直接运算,拆箱转化为int才能进行运算。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
4、默认值问题
Java中:
整数的默认类型是 int。
浮点数默认类型是 double,否则需要 在后面加f、d
浮点数如果不加,默认就是double类型的,前面再用 float修饰,就会报错。可以使用两种方法解决:
结尾加上
使用(float) 强转
5、Integer.parseInt()和Integer.valueOf()的区别
parseInt() 和 valueOf() 都是Integer 对象的方法。入参都是一个String字符串。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
parseInt
将字符串参数作为带符号十进制整数来转换。如果无法转换,抛出 NumberFormatException。
valueOf
Integer派别:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。 Double派别:Double、Float的valueOf方法的实现是类似的。每次都返回不同的对象。
6、精度丢失问题
不同类型的数据在运算的时候,会向高精度的数据类型转换。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
其实double类型数值的计算经常会出现这种精度丢失的问题,尤其是有小数点的情况下,常常会因为精度丢失而导致程序出错。因为计算机是通过二进制进行运算的,而计算机在表示小数的二进制是会有精度问题的。
所以我们在运算高精度的数据的时候,可以使用 类
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
7、字符串与整数拼接问题
从左到右按顺序运算,a+b 的结果是 12 ,是一个String,然后再拼接 c,最后是 String
从左到右按顺序运算,b + c 的结果是 3,是一个int ,然后拼接a,变成 String。
8、留几个问题瞅瞅
1) 设有下面两个赋值语句:
下述说法正确的是()
A a是整数类型变量,b是整数类对象。 B a是整数类对象,b是整数类型变量。 C a和b都是整数类对象并且它们的值相等。 D a和b都是整数类型变量并且它们的值相等。
答案是 D,intValue()是把Integer对象类型变成int的基础数据类型;
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
2)表达式(short)10/10.2*2运算后结果是什么类型?
A short B int C double D float
答案是 C,Java中,你如果 没有在数字后面声明,浮点数默认为double。
要注意是(short)10/10.2*2,而不是(short) (10/10.2 *2),前者只是把10强转为short,又由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认为double,所以答案是double;后者是把计算完之后值强转short。
以上就是Java基本数据类型的基本介绍,重温一下,避免踩坑。
学习更多知识,请点击:https://space.bilibili.com/216317641
https://space.bilibili.com/701029654
作者:HaC是个程序员
链接:https://juejin.cn/post/6938655564943589384
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/26265.html