• 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
            
            
        
        
        }

    }

  • 相关阅读:
    最近玩Bootstrap , 一些小工具 记录在案。
    测试word发表博客
    Linux at 定时任务
    Linux查看磁盘目录内存空间使用情况
    R生存分析AFT
    Accelerated Failure Time Models加速失效时间模型AFT
    Shell sleep指定延迟时间
    Shell脚本导入外部脚本内容
    Shell输入输出重定向
    Shell while
  • 原文地址:https://www.cnblogs.com/destiny-2015/p/12233673.html
Copyright © 2020-2023  润新知