基本数据类型

 java中数据类型

 整数默认:int    

小数默认:double

基本数据类型取值范围

整型

byte	Byte	[-2^7~2^7-1]	1个字节		8位35B
short	Short	[-2^15~2^15-1]	2<span style="font-family: Arial, Helvetica, sans-serif;">个字节			16位35S
int	Integer	[-2^31~2^31-1]	4个字节		32位35
long	Long	[-2^63~2^63-1]	8个字节		64位35L

浮点型

float	Float	[1.401298e-45~3.402823e+38]	4个字节
double	Double	[4.9000000e-324~1.797693e+308]	8个字节

 

char占两个字节,boolean占一位:

 

默认转换

byte,short,char——>int——>long——>float——>double;          byte,short,char相互之间不转换,他们参与运算首先转换为int类型 ;

强制转换 :把大的类型转换成小的类型

 

 

目标类型 变量名=(目标类型)(被转换的数据);

 

相关题目

1、下面的语句是否有问题?

byte b1 = 3, b2 = 4;

byte b3 = b1 + b2; //语句1

int b4 = b1+b2; //语句2

byte b5 = 3+4; //语句3

解答:语句1会报错,因为b1和b2作为变量参与运算的时候,会先提升为int类型,然后将int类型的结果赋值给byte,可能会丢失精度,所以报错;

语句2没有问题,因为是把int结果给int,类型匹配;

语句3正确,因为3和4是常量,所以编译器编译的时候,会计算出结果,然后判断结果是否在byte的范围内,在的话就不会报错,如果咱们反编译class文件,会发现这一句变成了byte b5=7;

结论:变量参与运算会先做类型提升,而常量会直接计算后判断类型是否匹配;

 

2、下面这两个表示有没有问题,有什么区别?

解答:

float f1 = (float)12.345;

float f2 = 12.345F;

都没有问题,第一种相当于先定义了一个double类型常量,然后截取了后四个字节得到了f1,第二种是直接定义float,建议定义第二种。

 

3、byte b = 130 有没有问题?

解答:有,因为超出了范围;

如果如下修改:

byte b = (byte)130;

System.out.println(b);

结果为:-126,

分析:

A: 把130转换成二进制为:10000010,因为是int类型4个字节,所以结果因为是:

00000000 00000000 00000000 10000010 这个是130的原码,也是反码,也是补码;

B: 截取成byte类型的,结果为: 10000010,这个是结果的补码,我们需要转换成原码:

符号位 数值为

补码: 1 0000010

反码: 1 0000001 补码上减1

原码: 1 1111110 把反码各位反过来

接下来把11111110转换成10进制,结果为-126;

 

4、为什么long会自动转换成float?

解答:float虽然是4个字节,long是8个字节,但是底层存储方式不同,所以float能表示的范围比long大

 

5、JAVA中char能够表示一个汉字?

解答:能,因为JAVA中char是两个字节;

 

 

 

posted @ 2018-10-19 18:20  林深时见鹿!  阅读(256)  评论(0编辑  收藏  举报
博客已稳定运行: