zoukankan      html  css  js  c++  java
  • java数据类型转换

    类型转换

    Java 语言是一种强类型的语言。强类型的语言有以下几个要求:

    变量或常量必须有类型:要求声明变量或常量时必须声明类型,而且只能在声明以后才能使用。

    赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致。

    运算时类型必须一致:参与运算的数据类型必须一致才能运算。


    但是在实际的使用中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种需要,这个语法就是数据类型转换。
    在数值处理这部分,计算机和现实的逻辑不太一样,对于现实来说,1和 1.0 没有什么区别,但是对于计算机来说,1 是整数类型,而 1.0 是小数类型,其在内存中的存储方式以及占用的空间都不一样,所以类型转换在计算机内部是必须的。

    Java 语言中的数据类型转换有两种:

    自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。

    强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

    由于基本数据类型中 boolean 类型不是数字型,所以基本数据类型的转换是出了 boolean 类型以外的其它 7 种类型之间的转换。下面来具体介绍两种类型转换的规则、适用场合以及使用时需要注意的问题。


    自动类型转换

    自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以 Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成。


    转换规则:从存储范围小的类型到存储范围大的类型。
    具体规则为:byte→short(char)→int→long→float→double

    也就是说 byte 类型的变量可以自动转换为 short 类型,示例代码:

    byte  b  =  10;

    short  sh  =  b;这里在赋值时,JVM 首先将 b 的值转换为 short 类型,然后再赋值给 sh。
    在类型转换时可以跳跃。示例代码:

    byte  b1  =  100;
    int  n  =  b1;

    注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。

    强制类型转换

    强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。

    转换规则:从存储范围大的类型到存储范围小的类型。

    具体规则为:double→float→long→int→short(char)→byte

    语法格式为:(转换到的类型)需要转换的值

    示例代码:

    double  d  =  3.10;
    int  n  =  (int)d;

    这里将 double 类型的变量 d 强制转换成 int 类型,然后赋值给变量 n。需要说明的是小数强制转换为整数,采用的是“去 1 法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是 3。整数强制转换为整数时取数字的低位,例如 int 类型的变量转换为 byte 类型时,则只去 int 类型的低 8 位(也就是最后一个字节)的值。
    示例代码:

    int  n  =  123;
    byte  b  =  (byte)n;
    int  m  =  1234;
    byte  b1  =  (byte)m;

    则 b 的值还是 123,而 b1 的值为-46。b1 的计算方法如下:m 的值转换为二进制是10011010010,取该数字低8位的值作为b1的值,则b1的二进制值是11010010,按照机器数的规定,最高位是符号位,1 代表负数,在计算机中负数存储的是补码,则该负数的原码是 10101110,该值就是十进制的-46。
    注意问题:强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/qq1312583369/p/10837124.html
Copyright © 2011-2022 走看看