1. 类型转换与类型提升
以下哪些赋值语句可以通过编译?
byte a = 128;×(超出取值范围)
short b = 68;√
short c = -32000;√
float d = 12.34;×(float = 12.34F;浮点数默认为double类型,此时应该加F或f)
char e = '25';×(字符只能写一个)
char f = 65;√(可直接赋值为整数)
char g = b;×(short可能为负数)
boolean = "true";×(true/false为Java保留字,直接使用)
String i = " 123";√(空格也是字符)
public class TestCharacter {
public static void main(String[] args) {
//short 2Byte 16bit 有符号数 -2^15~2^15-1 -32768~32767
//char 2byte 16bit 无符号数 0~2^16-1 0~65535
short s = 65;
char c = s;
System.out.println(c);
/*
TestCharacter.java:7: 错误: 不兼容的类型:
从short转换到char可能会有损失
char c = s;
^
1 个错误
*/
// char c = (char)s;
}
}
2. 类型转换
-
自动转换类型:
1)两种类型相互兼容
2)目标类型大于源类型
package demo;
public class TestAutoConvert {
public static void main(String[] args) {
short s = 123;
int i = s;//int为目标类型,short为源类型,实现类型自动转换
}
}
public class TestConvertion {
public static void main(String[] args) {
short s = 123;
int i = s;//目标类型大于源类型
System.out.println(i);
double d = i;
System.out.println(d);
int num = 123;
/*
byte target = num;
TestConvertion.java:16: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte target = num;
^
1 个错误
*/
byte target = (byte)num;
System.out.println(target);
//小数强转为整数
double x = 12.34;
int y = (int)x;
System.out.println(y);
//整数强转为整数(大的往小的里面放)
short m = 130;
byte n = (byte)m;
System.out.println(n);
// short 258 0000 0001 0000 0010
// byte 0000 0010
int a = 65;
char b = (char)a;
System.out.println(b);
}
}
-
强制类型转换规则:
(1)整数长度足够,数据完整
例如:int i = 100; byte b = (byte)i; //b = 100
(2)整数长度不够,数据截断
例如: int i = 10000; byte b = (byte)i; //b = 16(符号位变化,可能变为负数)
(3)小数强转整数,数据截断
例如:double d = 2.5; int i = (int)d; //d = 2(小数位被舍掉)
(4)字符整数互转,数据完整
扫描二维码关注公众号,回复: 11311772 查看本文章 例如:char c = 65; int i = c; // i = 65
(5) boolean的取值为true/false,不可与其他类型转换
3. 表达式
使用运算符连接的变量或字面值,并可以得到一个最终结果
例如:
1+2;int a = 2; a - 2;
int b = 10; int c = 20; b * a; c / b;
short d = 100; int e = 200; d > e; d <= e;
…
4. 自动类型提升
-
进行算术运算时:
(1)两个操作数有一个为double时,计算结果提升为double。
(2)如果操作数中没有double,有一个为float,计算结果提升为float。
(3)如果操作数中没有float,有一个为long,计算结果提升为long。
(4)如果操作数中没有long,有一个为int,计算结果提升为int。
(5)如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。
-
特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。
public class TestUp {
public static void main(String[] args) {
double num1 = 1 + 2.14;
float num2 = 1 + 2.1F;
long num3 = 3L + 123;
int num4 = 5 + 3;
short s = 5;
byte e = 3;
//short num5 = s + e;
String str = "abc";
String result = str + num2 + num3;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(result);
}
}