5. 类型转换与类型提升

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. 自动转换类型:

    ​ 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. 强制类型转换规则:

    ​ (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. 进行算术运算时:

    ​ (1)两个操作数有一个为double时,计算结果提升为double。

    ​ (2)如果操作数中没有double,有一个为float,计算结果提升为float。

    ​ (3)如果操作数中没有float,有一个为long,计算结果提升为long。

    ​ (4)如果操作数中没有long,有一个为int,计算结果提升为int。

    ​ (5)如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。

  2. 特殊:任何类型与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);
	}
}

猜你喜欢

转载自blog.csdn.net/zhu_fangyuan/article/details/106374156
今日推荐