zoukankan      html  css  js  c++  java
  • java的自动类型转换

    package BaseType;
    /*java的自动类型提升和窄化转换
     *
     * 1. 当一个char,short,byte类型的变量被赋值给一个超出他自身能表示的最大范围的数,java会自动将该数转化为int型.
     * 		
     * 2. 当char,short,byte类型的变量进行算术运算, 位操作运算 包括他们的复合运算的时候,会自动提升成int类型
     *    但是算术运算,位操作运算和他们的复合运算不同, 具体不同之处如下代码.
     * 		算术运算符包括:+,-,*,/,%,+(一目运算符),-(一目运算符)
     * 		位操作运算符包括移位运算(&,^,|),按位运算(<<,>>,>>>)
     * 	
     */
    
    public class AutoConversion 
    {
    	
    	public static void main(String args[])
    	{
    		//由于int型赋值给比他表示范围小的类型,那么编译器类型检查就会报错,提示要进行强制类型转化,也就是窄化转换
    		//byte a = 129 ; 因为byte是8字节,表示的范围是从-128到+127, 所以赋值128会自动转化成int类型,编译器在进行类型检查就会报错,必须窄化转换为byte
    		byte a = (byte)129 ;
    	}
    
    	public void byteTest(byte x , byte y)
    	{
    		x = (byte) (x*y) ;	//由于x*y的结果被自动提升为int类型, 所以在重新赋值给x时,就必须使用窄化转换, 其他的算术运算符和位操作运算相同
    		x = (byte) (x/y) ;
    		x = (byte) (x+y) ;
    		x = (byte) (x-y) ;
    		x = (byte) (x%y) ;
    		
    		x++ ;
    		x-- ;
    		
    		x = (byte)+y ;
    		x = (byte)-y ;
    		
    		x = (byte) ~y ;
    		x = (byte) (x&y) ;
    		x = (byte) (x|y) ;
    		x = (byte) (x^y) ;
    		x = (byte) (x>>y) ;
    		x = (byte) (x<<y) ;
    		x = (byte) (x>>>y) ;
    		
    		x += y ;//复合运算不同, 尽管也进行了类型提升, 但是不需要窄化转换, 而且结果和使用算术运算或者位运算的结果相同, 但是具体为什么不需要,书里面也没有说,今后在接触到了再补充
    		x -= y ;
    		x *= y ;
    		x /= y ;
    		x %= y ;
    		x <<= 1 ;
    		x >>= 1 ;
    		x >>>= 1 ;
    		x &= y ;
    		x |= y ;
    		x ^= y ;
    	}
    
    }
    

     《thingking in java》笔记, 如果有什么不对, 欢迎指正.

  • 相关阅读:
    JS如何判断是否已经引入某个css或是js?
    FILTER:progid:DXImageTransform.Microsoft.Gradient使用
    根据ip查询ip归属地
    java判断是否是合法IP
    jQuery下实现等待指定元素加载完毕(可改成纯js版)
    jsp 循环数字
    jsp获取当前日期
    MyBatis In的使用
    给半径求圆面积
    实现一个数值加法函数,返回两个数字的和。要求能进行参数验证,若参数不是数字或为空则抛出异常。
  • 原文地址:https://www.cnblogs.com/iamzhoug37/p/4274494.html
Copyright © 2011-2022 走看看