Java有八种基本数据类型,分别是byte、short、int、long、float、double、char、boolean
整型 第一位表示符号位,1为正0为负 byte 占用1个字节,取值范围为-128~127(-2^7~2^7-1) short占用2个字节,取值范围为-32768~32767(-2^15~2^15-1) int占用4个字节,取值范围为-2147483648~2147483647,(-2^31~2^31-1) Long 占用8个字节取值范围-2^63~2^63-1
浮点型 float 单精度 占用4个字节3.402823e+38 ~ 1.401298e-45 double 双精度占用8个字节1.797693e+308~ 4.9000000e-324 通常的浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,需要再数值后面加上f。对于浮点型要记住一点,浮点型的数据是不能完全精确的。
布尔型 这个类型只有两个值,true和false(真和非真)
字符型 用于存放字符的数据类型,占用2个字节,采用unicode编码。Char的表示方式要用单引号,例如 Char c = ‘A’。因为char类型采用的是Unicode编码,Unicode字符集中收录了汉字,所以char类型也能用来表示汉字,比如char c = ‘中’; ,但是有些生僻的汉字可能没有收录到Unicode字符集中,所以char并不能够存储所有的汉字。
不同基本类型之间可以相互转换 隐式转换 例如int型可以直接赋值给long型,实际上是进行了隐式转换。 int x1 = 8; long x2 = x1; 表示范围小的可以隐式转换为表示范围大的。 byte,short,char –>int –>long –>float –>double (long型占8个字节,float型占四个字节,但是由于float浮点型的存储方式比较奇特,float的表示范围要比long的大。)
强制转换 表示范围大的也可以通过强制转换转换成表示范围小的,例如: long x2 = 8; int x1 = (int)x2;
面试小技巧:
下面的两种写法是否有问题?
short s1 = 1;
s1 = s1+1; // 1
short s2 = 1;
s2 +=1; // 2
第一种写法有问题,1默认是int型,s1+1的结果是int型(int型的表示范围比short型要大,所以结果会自动转换成int型,这样可以防止精度丢失),将int型赋值给short型,编译会出错。第二种写法是正确的,+=是java语法规定的运算符,编译器会对它进行特殊的转换操作(应该是强制转换),所以编译不会出错。
问: float f = 6.6; 这种写法是否正确? 不正确,6.6默认是双精度数,将双精度型赋值给单精度会造成精度损失,编译器会报错,需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F;
问:对于1和2,输出结果是什么?
System.out.println(0.3==0.3); //1
System.out.println(3*0.1==0.3); //2
1:true,2:false,可以尝试将2的结果打印出来,你会觉得很神奇,这里面水很深,相关文章https://www.zhihu.com/question/56545018