Java学习笔记--类型自动转换、强制类型转换、溢出

package myJavaNotes;

/**
 * 类型自动转化
 *@author 康爸爸
 *@date:   2020年1月21日 上午3:32:08
 *
 */


/**
 * 强制类型转换
 *@author 康爸爸
 *@date:   2020年1月21日 下午9:04:41
 *
 */



/**
 * 溢出
 *@author 123
 *@date:   2020年1月21日 下午9:58:50
 *
 */
public class TypeConversion {

    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //类型自动转化,容量小的数据类型可以自动转换位容量大的数据类型
        //        容量的大小是指表示的范围。
        //例:long类型(8个字节)可以自动转化位float(4个字节)类型,即,long类型的变量可以给float类型赋值
        //其他类型需要使用强制转换类型()
        /**
         *               char
         *                 ↓
         * byte→short→ int → long↙。。。
         *                 .  ↘    .
         *                 v      v
         *               float→double
         *
         *
         * int可以自动转化为short、byte、char类型,不需要进行强制类型转换,只要不超出short、byte、char类型范围即可
         * 例:short b = 12;合法
         *        short b = 1234567;非法,1234567超出了short的表示范围
         * */
        
        int a = 34;
        long b = a;//合法,int类型自动转换为long类型
        double d = a;//合法,int类型自动转换为double类型
        
        //float f = 1.0;//非法, = 后面的数值为double类型,不能自动转化为float类型
        float f = 3;
        d = f;//合法,float类型自动转换为double类型
        f = a;//合法,int类型自动转换为float类型,但是会有精度缺失
        f = b;//合法,long类型自动转换为float类型,但是会有精度缺失
        d = b;//合法,long类型自动转换为double类型,,但是会有精度缺失(虚线)
    
        //特例
        char q = 123;//等号右边为 int类型且未超过char类型的表示范围,自动转换为char类型
        byte w = 123;//等号右边为 int类型且未超过byte类型的表示范围,自动转换为byte类型
        short e = 123;//等号右边为 int类型且未超过short类型的表示范围,自动转换为short类型
        
        //但是不能用变量给 char、byte、short赋值,只能用常量
        //例:q = a;中a为int类型变量,给char类型的q赋值是非法的
        //q = a;//非法
    
        
        System.out.println("===============================================");
        
        /*
         * 强制类型转换:(type)variable
         *
         * */
        System.out.println(q);//输出char类型q == ‘{’
        System.out.println((int)q);//将char类型强制转换成int类型
    
    
        System.out.println("==================================================");
    
        
        /**
         * 1、溢出:操作比较大的数时,要注意是否溢出(结果比要表示的范围大,或者为负数)
         * 2、尽量不要命名名字为l的变量,l容易与数字1混淆。
         * 3、long类型的变量在赋值时,= 等号右边的常量末尾尽量用大写L结尾,不要用小写l
         * */
        
        int money = 1000000000;//10亿
        int years = 20;
        int total = money * years;
        
        
        System.out.println("total = "+total);//返回的total时负数,超出了int的范围,溢出;
        
        long total1 = money * years;
        System.out.println("total = "+total);//返回的toutal任然时负数。money和years默认时int,因此money*int的结果为int类型,再转换成long类型,但是在int类型的过程中已经溢出,发生数据丢失;
    
        long total2 = money * (long)years;
        System.out.println(total2);//返回的total2==20000000000 正确。years先被转换成long类型,而int类型*long类型的结果为long类型,所以未发生溢出,数据未丢失,结果正确
    
    
        //命名问题
        int l = 2;//不太容易分清是小写L还是1
        long s = 2345l;//不太容易区分结尾是小写L还是1
        
        
    
    
    }

}

猜你喜欢

转载自www.cnblogs.com/destiny-2015/p/12233673.html