java基础 之 基本数据类型之间的运算规则(不包括boolean型)

一、自动类型提升

当容量小的数据类型与容量大的数据类型做运算时,结果会进行自动类型提升,自动提升为容量大的数据类型。

byte、short、char --> int --> long -->float -->double

当byte、char、short三种变量之间做运算时,做过为int型
例如

public class NumberTest(){
	public static void main(String args[]){
	byte b1 = 2;
	short s1 = 1;
	int sum1 = b1 + s1;//若sum1声明为byte或short型的变量,编译都不通过	
	}
}

当两个相同类型的变量相加时,也会出现自动类型提升的情况。

byte b1  = 127;
byte b2 = 1;
int sum1 = b1 + b2;//这时候sum1的数据类型是int型的

当这三个数据类型的变量与容量更大的变量做运算时,生成的会是那个更大的数据类型的变量。例如byte类型的变量与int类型的变量做运算,结果自动出来的int类型的变量。也可以手动提升为long型的变量。

		byte b1 = 2;
		int i1 = 129;
	 	int sum1 = b1 + i1;//若 byte sum1 = b1 + i1;编译不通过
	 	long l1 = b1 + i1;//这样手动的也是可以的。

特殊情况1
直接看代码

//通常情况下,long型变量的赋值是要在整数后面加l。
long l1 = 123213;
System.out.println(l1);//但这个时候编译没报错,且能正常运行。

原因:因为定义的变量值小于int的范围,系统默认他为int型。这也算一个自动类型提升。

特殊情况2
整数常量默认类型为int型;浮点型常量默认类型为double型

 byte b = 12;
 //byte b3 = b + 1;
 //编译失败 因为此时b3的类型为int型
 //float f1 = b + 12.3;
 //编译失败,因为f1的类型为double型

特殊情况3

 char c1 = 'a';//在Unicode表中a = 97
        char c3 = 97;
        char c4 = '5';
        System.out.println(c3);//输出结果为a
        System.out.println(c4);//输出结果为5

输出结果
java基础 之 基本数据类型之间的运算规则(不包括boolean型)

强制类型转化

强制类型转化即自动类型提升的逆运算。
①需要使用强转符:() , 括号里面为需要转换的类型。
②进行强制类型转换时,可能导致精度丢失。

class VariableTest3{//强制类型转换
    public static void main(String[] args){

        double d1 = 12.9;
        //精度损失举例1
        int i1 = (int)d1;//截断操作,即d1后面的小数点全都舍去
        System.out.println(i1);//输出结果为12
        //精度损失举例2
        int i2 = 128;
        byte b = (byte)i2;
        System.out.println(b);//输出结果为-128
    }
上一篇:原型设计模式,编程范式与面向对象


下一篇:geeksforgeeks@ Sorting Elements of an Array by Frequency (Sort)