zoukankan      html  css  js  c++  java
  • 第四篇 基本类型转换

    一、自动类型转换

    容量小的数据类型可以自动转换成容量大的数据类型,这里的容量指的是基本类型的表数范围而不是占用的存储空间。 如下图所示,黑色的表示无数据丢失的自动类型转型,红色的表示在转型的时候可能会精度丢失(但是编译的时候不会报错)。布尔类型不能做任何的类型转换。

    image

    public class TestCast{
    	
    	public static void main(String[] args){
    		//整数自动转换
    		byte b = 2;
    		short s = b;
    		int i = s;
    		long lo = i;
    		System.out.println("b=" + b + " s=" + s + " i=" + i + " lo=" + lo );
    		
    		//字符转整数
    		char c = 'a';
    		i = c;
    		System.out.println("c=" + c + " i=" + i);
    		
    		//int转float
    		i = 10;
    		float f = i;
    		System.out.println("i=" + i + " f=" + f);
    		
    		//long转float
    		float f2 = lo;
    		System.out.println("f=" + f2);
    	}
    }

    二、强制类型转换

    容量小的能够放进容量大的空间,但是容量大的放进容量小的肯定不行,这就需要将容量大的强制转换成小的才能放进容量小的空间。

    强制转型会带来的问题:(1) 可能造成精度降低或者溢出。(2) 如果转换的类型超出目标类型的表数范围,会输出完全不同的值。

    //精度丢失
    double d = 3.14;
    //int i = d; //会报 可能损失精度错误
    int i = (int) d ; // 强转
    System.out.println(i); //输出3,精度丢失
    		
    //超过目标类型范围
    int i2 = 128;
    byte b = (byte) i2;
    System.out.println(b); //输出-128

    三、类型提升和溢出问题

    1. 表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。若将一个float值与一个double值相乘,结果就是double;如将一个int和一个long值相加,则结果为long。

    int a = 1;
    double b = 2.0;
    int c = a * b;  //会报精度丢失错误,因为a和b相乘后,类型自动提升为double

    2. 在操作比较大的数值时,或许值本身没有超过类型的表数范围,但是进行运算后可能就超出了类型的表数范围。这种情况就发生值得溢出,虽然不会报错,但是得到的值并不是我们想要的值。这个时候我们可以将一个值强转成类型大的值。

    int a = 1000000000;
    int b = 3;
    //int c = a * b; //超出int的表数范围 输出负数
    long c = (long) a * b; 
    System.out.println(c); 
  • 相关阅读:
    catalina.sh详解
    jenkins环境变量问题
    张量或维度表示数学理解思路
    YOLO v3重点理解、单元格坐标系、偏移量以及放缩、置信度
    YOLO v3重点理解、单元格坐标系、偏移量以及放缩、置信度
    yolo v3好的想法和一些很好的见解
    损失函数的选择,交叉熵函数的分类以及为什么使用这种损失函数可以提升效果,为什么划分格子grid大小最后是变化的,不是固定的。
    多维python切片,和yolo最后结构1,3,16,16,85的理解
    进度条
    .argmax(-1)理解
  • 原文地址:https://www.cnblogs.com/duoluomengxing/p/6516996.html
Copyright © 2011-2022 走看看