java基本数据类型
众所周知java中的内置数据类型有8种:byte(字节型)、short(短整型)、int(整型)、long(长整型)、float(单精度浮点类型)、double(双精度浮点类型)、char(字符型)、boolean(布尔)
每种数据类型都有他们的封装类,通过分装类的方法以及属性处理数据。下面是一些基本数据类型的一些基本信息
数据类型 | 关键字 | 封装类 | 占用字节 | 位 | 默认值 | 取值范围 | 备注 |
---|---|---|---|---|---|---|---|
字节型 | byte | Byte | 1 | 8 | 0 | -128 ~ 127 | |
短整形 | short | Short | 2 | 16 | 0 | -32768 ~32767 | |
整型 | int | Integer | 4 | 32 | 0 | -2147483648 ~ 2147483647 | |
长整型 | long | Long | 8 | 64 | 0 | -9223372036854775808 ~ 9223372036854775807 | |
单精度浮点型 | float | Float | 4 | 32 | 0.0 | 1.4E-45 ~ 3.4028235E38 | 在值的后面需要添加 f 或者 F (float类型标识) |
双精度浮点型 | double | Double | 8 | 64 | 0.0 | 4.9E-324 ~ 1.7976931348623157E308 | |
字符型 | char | Character | 2 | 16 | /u0000 | 0 ~ 65535 | 默认值是一个空格 ,取值范围我转成了int类型的 |
布尔类型 | boolean | Boolean | 1 | 8 | false | true、false |
这里出现了一个字节(byte,对没有看错就是那个字节型)跟位(bit)
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位( 源自百度—byte)。这里不做多的解释了,我也解释不清( ̄~ ̄)
表格里面为什么要标注float要写标识呢,倘若写了个浮点类型的 3.52 会自动默认为double类型的数值,这里就又涉及到了基本数据类型的一个等级了,你没有听错,基本数据类型也有等级:byte = short = char 低于 int 低于 long 低于 float 低于 double
其中若级别小于int,进行计算的时候,最终的数据类型会自动转换为int,如果高于int,最终数据结果会取其中最高的一个,由低级别转到高级别,是属于自动类型转换又称为隐式转换,这点是由系统自动转换的。想要高级转低级可以使用 (类型) 表达式 方式进行强制转换
/**
* 强制转换语法为
* (类型) 表达式
* 这里是double强制转换成int
*/
double d = 2.32
int doubleToInt = (int) d;
//输出 doubleToInt 结果为 2
/**
* 下面是一些数据转换
*/
int i = 5;
float f = 256.14f;//不写f会报错,默认为double类型数值
double d = f;
float fa = i;
//输出 i= 5 d= 256.1400146484375 fa=256.14 fb = 5.0
//为什么会出现double的小数点多出那么多位
//是因为float为四个字节,double为八个字节,float--->double时候会补位,如果这里补位不出现误差的话应该可以实现,如果不想要补位怎么办呢
double da = Double.parseDouble(String.valueOf(f))
//输出 da = 256.14 这里先将float转换成String 再由String 转成Double类型
对于强制转换会有丢失精度或者溢出的问题,可以由高精度数字进行计算。这是一些基本数据类型的信息以及自动类型转换。
高精度数字
BigInteger跟BigDecimal,这两个是包装类,但是没有基本数据类型,需要以创建对象的方式进行操作。跟基本数据类型的操作相似,但是是以方法调用。常用方法如下
//声明
BigDecimal bigDecimal1 = new BigDecimal("22.95");
BigDecimal bigDecimal2 = new BigDecimal("35.25");
bigDecimal1.add(bigDecimal2);//高精度数字的加法 结果 58.20
bigDecimal2.subtract(bigDecimal1);//减法 结果 12.30
bigDecimal1.multiply(bigDecimal2 );//乘法 结果 808.9875
bigDecimal2.divide(bigDecimal1);//除法 这个地方我运行会报错
//java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
//这个问题是因为没有精确到小数点后几位,JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,
//定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常
//正确做法如下
bigDecimal2.divide(bigDecimal1,2);//BigDecimal有三个divide方法,一参二参三参,此处不在细说
这是比较 常用的方法中的几个。