jave类型转换

来源:互联网 发布:更改mac屏幕下面的图标 编辑:程序博客网 时间:2024/05/20 17:58

一、类型转换
1、自动类型转换
能够自动实现自动类型转换需要满足两个条件:

  • 两种数据类型彼此兼容。(可以理解为同种类型的转换,比如整型之间的转换)
  • 目标类型的(转化的类型)取值范围大于源类型(被转化)的取值范围。

具体的3种类型转换情况:

  1. 整数类型之间可以实现转换。byte类型的数值可以赋值给short、int、long类型的变量。short、char类型的数值可以赋值给int、long类型的变量。int类型的数值可以赋值给long类型的变量。
  2. 整数类型转换为float类型:byte、short、char、int类型的数据可以赋值给float类型的变量,注意,long类型的数值不可以赋值给float,因long类型的取值范围大于float类型。
  3. 其他类型转换为double类型:byte、short、char、int、long、float类型的数值可以赋值给double类型的变量。

在自动转换类型中,double类型相当于金字塔结构中的顶端,暴君王者。其他类型是他的手下,他可以任意取其他人的性命。long类型是宰相之类,一人之下万人之上。可以控制整个整型,而float类型比long的地位低下,但与double属于王脉,所以除了long这个宰相外,其他类型都是可以控制的。

注意:表达式类型自动提升的情况
变量在表达式中进行运算时,有可能发生自动类型转换。如果发生表达式类型自动转换时,需要进行强制类型转换。

注意:

2、强制类型的转换
顾名思义,是不满足自动类型的两大条件的转换。
强制类型的转换具体格式:

目标类型 变量=(目标类型)值

注意:

  • 进行强制类型转换,会发生取值范围较大的数据类型想取值范围较小的类型转化,极容易造成数据的精度的丢失。
  • 在使用特殊的赋值运算符(+=、-=、*=、/=、%=)进行赋值时,强制类型转换会自动完成。既不用强制类型转换具体格式。

对表达式类型自动提升的补充
1.表达式中的自动类型提升:
表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。
例如:

short s1 = 1;
s1=s1+1;

s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short类型。
例如:

short s1 = 1;
s1 += 1;

+=是java语言中的运算符,Java编译器会对它进行自动地强制类型转换。
2.类型提升规则:

  • byte、short和char类型的值都被提升为int类型;
  • 如果有一个操作数是long类型,就将整个表达式提升为long类型;
  • 如果有一个操作数是float类型,就将整个表达式提升为float类型;
  • 如果任何一个操作数为double类型,结果将为double类型。

例如:
byte b=1;
char c=’a’;
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
f*b中,b被自动提升为float类型,该表达式结果是float类型;
i/c中,c被自动提升为int类型,该表达式结果是int类型;
d*s中,s被自动提升为doubl类型,该表达式结果是double类型;
最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。

1 0