数据类型以及三种类型转换

来源:互联网 发布:道德知乎 编辑:程序博客网 时间:2024/05/16 12:55

1.数据类型

byte8位,最大存储数据量是255,存放的数据范围是-128~127之间。

short16位,最大数据存储量是65536,数据范围是-32768~32767之间。

int32位,最大数据存储容量是232次方减1,数据范围是负的231次方到正的231次方减1

long64位,最大数据存储容量是264次方减1,数据范围为负的263次方到正的263次方减1

float32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上fF

浮点型的精度为1e-6(0.000001),

默认整数int,默认浮点数double
所以比较是使用2个数的差是否小于1e-6.
例如: float a  = 1.00002, b = 5.0;
fabs(a -b) < 1e-6 : a 等于 b

double64位,数据范围在4.9e-324~1.8e308,赋值时可以加dD也可以不加。

boolean:只有truefalse两个取值。

char16位,存储Unicode码,用单引号赋值,里面只能有一个字母还有一种情况,char a=98,这个赋值时一个ASCII码,输出也是对应的值。

Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。下表列出了Java中定义的简单类型、占用二进制位数及对应的封装器类。

 

简单类型

boolean

byte

char

short

Int

long

float

double

void

二进制位数

1

8

16

16

32

64

32

64

--

封装器类

Boolean

Byte

Character

Short

Integer

Long

Float

Double

Void

 2.自动类型转换,强制类型转换以及类型提升

⑴自动类型转换

 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换。例如:

代码中 int 型变量 score1 可以直接为 double 型变量 score2 完成赋值操作,运行结果为: 82.0 

这种转换称为自动类型转换

当然自动类型转换是需要满足特定的条件的:目标类型大于元类型

⑵强制类型转换

当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢?

显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小。此时就需要通过强制类型转换来实现了。

语法:( 数据类型 ) 数值

运行结果:

可以看到,通过强制类型转换将 75.8 赋值给 int 型变量后,结果为 75,数值上并未进行四舍五入,而是直接将小数位截断。

明白了吧,强制类型转换可能会造成数据的丢失哦,小伙伴们在应用时一定要慎重哦!

⑶类型提升

当一个java算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。Java定义如下的自动提升规则:
1. 所有byte型、short型和char型将被提升到int型。
2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。

 下面程序示范了一个典型的错误

//定义一个short类型变量
short sValue = 5;
//表达式中的sValue将自动提升到int类型,则右边的表达式类型为int
//将一个int类型赋给short类型的变量将发生错误。
sValue = sValue - 2;

 上面中的sValue -2表达式的类型将被提升到int类型,这样就是把右边的int型值赋给左边的short型变量,从而引起错误。

例题:

byte b1=1,b2=2,b3,b6; final byte b4=4,b5=6; b6=b4+b5; b3=(b1+b2); System.out.println(b3+b6);

语句:b3=b1+b2编译出错
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。


0 0
原创粉丝点击