您的位置:首页 > 编程语言 > Java开发

java中的基本数据类型

2014-01-20 21:24 288 查看

整形类型:

1. byte (1字节)----------盛1两饭的碗

2. short (2字节)---------盛2两饭的碗

3. int (4字节)------------盛4两饭的碗

4. long (8字节)----------盛8两饭的碗

简单记忆:byte是盛1两饭的碗,short是2两的碗,int是4两的碗,long是8两的碗,从这简单记忆中就能明白这几个类型间转换的关系。例如,将1两碗里的饭倒入2两的碗中是没有问题的,而将2两碗的饭倒入1两碗中则会溢出。

浮点类型:

1. float (4字节)

2. double (8字节)

字符型:

1. char (2字节)

布尔型

1. boolean

类型提升&强制类型转换:

/*下面两段代码输出的结果分别是什么*/
/*代码片段一*/
byte b = 5;
int x = 3;
x = x + b;
System.out.println(x);

/*代码片段二*/
byte b = 5;
b = b + 3;
System.out.println(b);
/*片段一输入结果为8,因为java中会将小数据类型自动做类型提升,会先将b提升为int然后再与x做运算,所以输出结果为8.
片段二编译不能通过,原因是java中的整数默认为int型,首先会将b提升为int,再对x+3做运算结果还为int,
将int型直接赋值给byte会存在数据丢失这是不允许的,除非显式的加入强制类型转换,否则编译都不能通过。
但是这里有一个问题,byte b = 5;为什么可以编译通过呢?
原因是:java会做一个隐式的类型转换,当数据超出所要赋值的类型时,编译不能通过。*/
/*下面的代码是否有错,为什么?*/
/*代码片段三*/
byte b = 4;
byte b1 = 3;
byte b2 = 7;
b = b1 + b2;
/*这段代码编译不同过,因为b1,b2的值不确定,无法确定其值是否会超出byte的范围,所以编译不过。
假如:b1 = 127; b1 + b2 将超出byte的范围*/
short s = 3;

1. s += 4;
2. s = s + 4;
/*
1和2两句代码有没有区别,为什么?
这两句代码是有区别的,第2句代码编译不过,存在类型提升,同时其值不能确定是否超过short的取值,而s += 4;java底层会对其结果进行判断.
*/

/*下面代码中a的输出结果是多少?*/
int a = 3;
a = a++;
System.out.println(a);
/*
a的输出结果为3,这里的运算过程为:
1.首先a在自增前会将a的值放入到临时变量中,然后自增之后赋给a,此时a的值为4;
2. 当等号右边运行完后,会将临时变量的值赋给a,所以结果为3;
过程模拟为:
temp = a;
a += 1;
a = temp;
*/

注:1字节=8bit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: