基本数据类型(8个)
一.整数类型(4个)
字节个数 取值范围
byte(字节) 1(8位) -2^7~2^7-1
short(短整型) 2(16位) -2^15~2^15-1
int(整形) 4(32位) -2^31~2^31-1
long(长整形) 8(64位) -2^63~2^63-1
二.(1.1) 浮点类型(2个)
名称 字节 精度问题
float 单精度浮点类型 4 保留8位小数点
double 双精度浮点类型 8 保留16位小数
(2.1) float与double精度丢失问题(解决方法)
float与double运算时将十进制转为二进制,
整数永远可以用二进制精确的表示,但小数就不一定,
小数的二进制有时候是不可能准确的,有时候会无限算下去,
所以在银行里不能使用float与double。(解决精度丢失问题(BigDecimal))
三.布尔类型(1个)
boolean的值只有两个 true 和 false,
在8种简单类型中除了boolean类型,
其他的数据类型可以自动转换成其他类型,例:
自动类型转换 (小 -> 大)
byte -> int char -> int
强制类型转换 (大 -> 小)
int -> char double -> long
四.下面有鄙人珍藏多年的几道数据类型面试题(☆)
1、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?
答: 前面表达式有错误,s1+1中1是int类型,右边的结果为int int赋值给s1,s1为short,需要强制类型转换 s1 = (short)(s1+1); 后面的表达式没有错误,因为+=这种扩展赋值运算符会自动类型转换。
2、char类型变量能不能储存一个中文的汉子,为什么?
答: char是2个字节16位,所以可以使用unicode编码表示 只要是在unicode编码中文范围的汉字都可以存储4E00-9FA5 但是也有特殊情况生僻字不能存储。
3、Integer和int的区别
答: int 基本数据类型,只能用于算术运算,位运算 Integer引用数据类型,类提供很多方法去便捷操作一些int值 例如:10进制数转2进制数的方法。
4、能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?
答:不可以,虽然double 和 long 都是8个字节(64位),但是底层的存储 结构不一样,double表示的范围 > long表示的范围 所以把double值赋值给long需要强制类型转换。
5、java 中 3*0.1 == 0.3 将会返回什么?true 还是 false?
答:java中float和double,在做运算的时候,会有精度丢失 所以这个表达式的值为false。
6、java 中 float f = 3.4; 是否正确?
答:3.4默认为double类型,若需要强制将3.4赋值给float需要强制类型转换 也有其他解决方案:
解决方案1: 3.4后面添加小f或者大F float f = 3.4F;
解决方案2: 变量f的数据类型,改为 double double f= 3.4;
解决方案3: 使用造型符号,强制类型转换 float f = (float) 3.4。