基本数据类型与类型相关,让我们先大概浏览一下类型相关的需要掌握的基础关键字有哪些吧~
类型相关总览
基本数据类型:byte short int long | float double |char| boolean(这篇文章的重点)
空返回值类型:void
空:null(null值 也可以报空类型)
this:在本类中使用指代本类对象,用于调用本类中的属性与方法
supper:在子类中使用 代表父类 可以调用父类的属性与方法
extends:子类继承父类
implements:类继承(实现)接口
class:类的标识词
interface:接口的定义标识词
我们现在来聚焦基本数据类型
首先,类型在JAVA10中只有如下两种
只要记住了基本数据类型,就可以较为轻松地判断引用数据类型。不在基本数据类型的,就是引用数据类型。
基本数据类型
四类八种
整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean
简单了解一下内存占用与取值范围
内存占用可以简单理解为占了内存条的多少
【byte】的范围是-128——127,很好记
【int】的范围大概是21个亿—— -21个亿
【long】的范围我们来启动计算器来看看
有19位
【单精度浮点数vs双精度浮点数】
1、字节越多越精确
(关于精确:0.01两位小数比较精确,0.1一位小数,相对于两位小数就不那么精确)
2、无论单精度浮点数还是双精度浮点数,都是一个近似值,不是精确值
(eg:十进制表示1/3,0.3的循环,由于空间没那么大,所以把后面的3舍掉,这样就是不精确)
【E】可以看作三点几乘上10的38次方
因此三的后面最多可以有38个0
先前long数过有19位,而float可以有39位。
因为float使用的是科学计数法,所以其表示的范围是可以比long更广的
所以科学计数法省空间,范围和内存占用不一定相关
【char】可以表示单引号的英文,单引号的中文,数字,中文,0-65535和被表示的存在一一对照的关系
【boolean】因为要么表示true要么表示false,因此一个字节的内存占用足矣
数据类型注意事项
1、字符串不是基本类型,而是引用类型
2、浮点型可能只是一个近似值,而非精确的值。
3、数据范围和字节数不一定相关,eg:float数据范围比long更加广泛,but float是4字节,long是8字节
4、浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F。
如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L,推荐使用大写字母后缀
关于byte为什么取值范围为什么是-128~127的小知识(可略过不看,有兴趣可以看看)
- {为什么取值范围不是-128到128呢?
原因——此处引用先辈(http://t.csdnimg.cn/KJtIp)文章中的内容
计算机中的数是以反码形式存储的,反码再求反码得到该数真值
反码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式
###### {[强制类型转换],表达式如
byte test = (byte) b;
意味着将变量 b
的值强制转换为 byte
类型。
假设这里的 b
是一个 int
类型的变量,并且它的值超过了 byte
类型的取值范围。Java会执行所谓的“向下转型”(narrowing primitive conversion),即将较大的原始类型转换为较小的原始类型。在转换过程中,超出目标类型取值范围的部分会被截断(对于正数)或环绕(对于负数)来适应新的类型。
例如,如果 b
的值是 130
,而我们将其强制转换为 byte
类型:
int b = 130;
byte test = (byte) b;
上述代码中,尽管 b
原本是 int
类型且值为 130
,但转换为 byte
后,因为 byte
类型只能存储 -128 到 127 之间的值,因此 130
会溢出并环绕回 -126
(因为在二进制补码表示法下,加1之后会得到下一个最接近的能够表示的负数)。
总结来说,byte test = (byte) b;
这样的格式是用于显式地将一个可能更大类型的变量 b
强制转换成 byte
类型。这种转换可能会导致数据丢失,特别是在 b
的值超出 byte
范围时。}
上述代码,最后会输出-56。原因如下:
456的二进制表示是111001000,由于int是32位的二进制,所以在计算机中,实际上是00000000000……111001000,当int转成byte的时候,那么计算机会只保留最后8位,即11001000。
int转成byte后第一个立马得到的都是补码,因此11001000是补码
11001000的最高位是1,那么表示是一个负数,而负数在计算机中都是以补码的形式保存的(正数的补码是本身,因此正数在计算机中也可以说是以补码的形式保存的)
补码[此处引用了(http://t.csdnimg.cn/l7ety)先辈文章]
补码转反码:
11001000-1=11000111
-
反码转原码
11000111符号位不变,其余各个位取反得到:10111000
-
-
,所以我们计算11001000的原码为10111000,所以11001000表示的是-56,所以最后test的值为-56。