zoukankan      html  css  js  c++  java
  • java类型转换详解(自动转换和强制转换)

    自动转换

    class Hello
    {
    	public static void main(String[] args)
    	{
    		//自动转换
    		int a = 5;
    		byte b = 6;
    		int c = a + b;
    		System.out.println(c);
    	}
    }
    

     a是int类型,b是byte类型 当二者进行加法运算时(根据同类型相加结果还是同类型 并且低类型的先转换成高类型的然后在进行运算  最后结果也是同类型的才行) 由于int的范围比byte的取值范围大这个时候jvm会自动将b转换成int类型

    强制转换

    //强制转换
    		int a = (int)8.8;
    

     强制转换就是将前面加上要转换的类型就可以了。

    下面来看比较特殊的

    class Hello
    {
        public static void main(String[] args)
        {
            byte b = 3;//正确
            int x = 3;//正确
            b = x;//错误
            
        }
    }
    

     上面代码在编译的时候会报错 常量3的类型为int   int类型可以赋值给byte的变量    但是b=x这个时候就不行了呢   因为根据常量优化机制  这种方式只针对 常量  不针对变量 也就是说大范围的不能赋值给小范围  除非用强制转换类型

    在看下面的也遵循上面的原则

    class Hello
    {
    	public static void main(String[] args)
    	{
    		byte b1=3,b2=4,b;//正确 (注:常量也有数据类型)
    		b = b1 + b2;//错误   因为b1  b2这个时候是变量(常量优化机制只针对常量不针对变量)
    		b = 3 + 4;//正确
    		
    	}
    }
    

     上面的例子也就是所谓的二个默认  当二个整数变量相加时  默认是int类型相加  当二个浮点型类型相加时  默认是doblue类型相加

     在看一个例子

    class Hello
    {
        public static void main(String[] args)
        {
            
            short s = 1;
            s = s + 1;//错误
    
            和
            
            short s = 1;
            s+=1;//正确
        }
    }
    

     上面的代码从表面上看是没什么区别的 为什么第二种写法就正确了呢?

    第一种算的时候  会将s自动转换为int类型在进行加法运算(低精度转高精度)  然后得出的结果是int类型  在赋值给short类型 这样是不合适的(高精度不能赋值给低精度类型)所以会报错 正确的写法如下面代码

    class Hello
    {
    	public static void main(String[] args)
    	{
    		
    		short s = 1;
    		s = (short)(s + 1);
    
    		System.out.println(s);
    	}
    }
    

     那第二种为什么是可行的呢?

    因为+=、-+、*=、/=  这些运算符比较特殊  本身就具有强制类型转换的作用。

  • 相关阅读:
    【芯片】国产MCU替代ST芯片调查
    【生产线】包装如何防止配件漏装
    【标准】运输振动试验
    【bat】批量提取文件夹内文件的名称
    【VBA】从批量excel文件中获取数据
    【滤波器】抗混叠滤波器
    【元器件】晶振TCXO、OCXO
    【C】三点求抛物线顶点
    德卡T10读卡器 读取身份证号码和身份证UID
    C# 执行查询语句,返回DataSet
  • 原文地址:https://www.cnblogs.com/nianzhilian/p/8531710.html
Copyright © 2011-2022 走看看