zoukankan      html  css  js  c++  java
  • 小康陪你学JAVA--------数据类型的转换

    此篇介绍JAVA 经常会遇到的一种输出情况:数据类型的转换。

        Java的数据类型在定义时就已经确定了,因此不能随意转换成其它的数据类型,但Java容许用户有限度地做类型转换处理。数据类型的转换方式可分为“自动类型转换”及“强制类型转换”两种。

    自动类型转换

         在程序中已经定义好了数据类型的变量,若是想用另一种数据类型表示时,Java会在下列的条件皆成立时,自动做数据类型的转换:

    1、 转换前的数据类型与转换后的类型兼容。

    2、 转换后的数据类型的表示范围比转换前的类型大。

        举例来说,若是想将short类型的变量a转换为int类型,由于short与int皆为整数类型,符合上述条件1;而int的表示范围比short大,亦符合条件2。因此Java会自动将原为short类型的变量a转换为int类型。

        值得注意的是,类型的转换只限该行语句,并不会影响原先所定义的变量的类型,而且通过自动类型的转换,可以保证数据的精确度,它不会因为转换而损失数据内容。这种类型的转换方式也称为扩大转换。前面曾经提到过,若是整数的类型为short或byte,为了避免溢出,Java会将表达式中的short和byte类型自动转换成int类型,即可保证其运算结果的正确性,这也是Java所提供的“扩大转换”功能。以“扩大转换”来看可能比较容易理解——字符与整数是可使用自动类型转换的;整数与浮点数亦是兼容的;但是由于boolean类型只能存放true或flase,与整数及字符是不兼容,因此是不可能做类型的转换。接下来看看当两个数中有一个为浮点数时,其运算的结果会有什么样的变化?

    范例:TestJava3_11.java

    01 // 下面这段程序声明了两个变量,一个是整型,一个是浮点型

    02 public class TestJava3_11

    03 {

    04   public static void main(String args[])

    05  {

    06    int a = 156 ;   

    07 float b = 24.1f ; // 声明一浮点型变量f,并赋值

    08

    09    System.out.println("a = "+a+" , b = "+b);

    10    System.out.println("a / b = "+(a/b));  // 这里整型会自动转化为浮点型

    11  }

    12 }

    输出结果:

    a = 156 , b = 24.0

    a / b = 6.5

         从运行的结果可以看出,当两个数中有一个为浮点数时,其运算的结果会直接转换为浮点数。当表达式中变量的类型不同时,Java会自动以较小的表示范围转换成较大的表示范围后,再作运算。也就是说,假设有一个整数和双精度浮点数作运算时,Java会把整数转换成双精度浮点数后再作运算,运算结果也会变成双精度浮点数。

    强制类型转换 

          当两个整数进行运算时,其运算的结果也会是整数。举例来说,当做整数除法8/3的运算,其结果为整数2,并不是实际的2.6666…,因此在Java中若是想要得到计算的结果是浮点数时,就必须将数据类型做强制性的转换,转换的语法如下:

                                                                       【 格式 3-1 数据类型的强制性转换语法 】

                                                                            (欲转换的数据类型)变量名称;

    因为这种强制类型的转换是直接编写在程序代码中的,所以也称为显性转换。下面的程序说明了在Java里,整数与浮点数是如何转换的。

    范例:TestJava3_12

    01 // 下面范例中说明了自动转换和强制转换这两种转换的使用方法

    02 public class TestJava3_12

    03 {

    04   public static void main(String args[])

    05  {

    06    int a = 55 ;

    07 int b= 9 ;

    08 float g,h ;

    09

    10    System.out.println("a = "+a+" , b = "+b);

    11 g = a/b ;

    12 System.out.println("a / b ="+g+" ");

    13    System.out.println("a = "+a+" , b = "+b);

    14 h = (float)a/b ; //在这里将数据类型进行强制类型转换

    15    System.out.println("a /b = "+h);

    16  }

    17 }

    输出结果:

    a = 55 , b = 9

    a / b = 6.0

    a = 55 , b = 9

    a /b = 6.111111

    当两个整数相除时,小数点以后的数字会被截断,使得运算的结果保持为整数。但由于这并不是预期的计算结果,而想要得到运算的结果为浮点数,就必须将两个整数中的其中一个(或是两个)强制转换类型为浮点数,下面的三种写法都正确:

    (1)(float)a/b // 将整数a强制转换成浮点数,再与整数b相除

    (2)a/(float)b // 将整数b强制转换成浮点数,再以整数a除之

    (3)(float)a/(/float)b // 将整数a与b同时强制转换成浮点数,再相除

    只要在变量前面加上欲转换的数据类型,运行时就会自动将此行语句里的变量做类型转换的处理,但这并不影响原先所定义的数据类型。此外,若是将一个超出该变量可表示范围的值赋值给这个变量时,这种转换称为缩小转换。由于在转换的过程中可能会丢失数据的精确度,Java并不会自动做这些类型的转换,此时就必须要做强制性的转换。

  • 相关阅读:
    mysql 存储过程中的 prepare语句(存储过程中动态增减表字段)
    MYSQL创建分区时候报错
    mysql存储过程调试方法
    磁力块[分块]
    区间最优覆盖问题[差分]
    区间最优覆盖问题[差分]
    导弹防御[差分]
    导弹防御[差分]
    CF10D LCIS[动态规划]
    CF10D LCIS[动态规划]
  • 原文地址:https://www.cnblogs.com/kangshow/p/3878314.html
Copyright © 2011-2022 走看看