zoukankan      html  css  js  c++  java
  • 010_类型提升问题

    一、概念部分

      自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。这里的容量指一个类型的表述范围、如char(-27~27-1  -128~127)

      强制类型转换:又被称为造型,用于显式的转换一个数值的类型、在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

      强制类型转换需要注意的是:当一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。如 : char c=(char) -3;

    二、转换概念图

      

     三、测试类型  

    public class TestClassCase {
    
        public static void main(String[] args) {
            //[√]因为123在byte这个类型的表述范围(-128~127)所以可以自动类型转换
            byte a=123;
            //[X]因为300不在byte这个类型的表述范围(-128~127)所以编译错误
            //byte b=300;
            //[X]因为-3不在char这个类型的表述范围(0~65535)所以编译错误
            //char c=-3;
            //[√]
            char d='a';
            //[√]
            int e=d;
            //[√]
            long f=123213;
            float g=f;
            //测试强制类型转换
            int h=-100;
            //因为-100不在char这个类型的表述范围(0~65535)所以此处强制类型转换压制了编译错误、致使程序实际运行时将该-100截断为一个完全不同的值
            char i=(char)h;
            //类型自动提升问题
            long j=123;
            int k=2;
             //int l=j+k;//(此处报编译错误、因为a+b之后类型自动提升为long类型、将一个long类型赋值给一个int类型时编译错误
             int money = 1000000000;  //10亿
            int years = 20;
            /*
             * 返回的是负数、要想结果正确必须将其中一个转换为long类型、这里不可(long)(money*years)
             * 因为money*years的值已经超出了int型的表述范围、本身已经溢出了、对一个已经溢出的做强转没有任何意义
             * 为了结果正确、我们将money强转为long类型
             */
            long total = (long)money*years;
            long times = 70L*60*24*365*70;//
            System.out.println("d="+d);
            System.out.println("e="+e);
            System.out.println("g="+g);
            System.out.println("i="+i);//被截断为一个无意义的值
            System.out.println("total="+total);
        }
    
    }

    测试结果:

    四、总结

      a)做所有的二元运算符(+-/*%),都会有类型提升的问题!比如  一个int型(+、-、*、/、%)一个long类型、其运行结果会自动提升为(其中最高的类型)long类型

        比如: long a=123; int b=2;     int c=a+b;(此处报编译错误、因为a+b之后类型自动提升为long类型、将一个long类型赋值给一个int类型时编译错误)

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    springboot 项目添加jaeger调用链监控
    使用Maven插件快捷打包发布远程Docker镜像 dockerfile-maven-plugin
    glide install失败 Update failed for golang.org/x/net: Cannot detect VCS
    Docker 修改默认存储位置
    istio 服务地图
    istio收集Metrics和日志信息
    istio分布式调用链Jaeger
    prometheus 通过企业微信接收告警
    prometheus alert rules文件格式化
    Effective C++ 笔记二 构造/析构/赋值运算
  • 原文地址:https://www.cnblogs.com/aeon/p/9786264.html
Copyright © 2011-2022 走看看