Java 中的类型转换,示例

原文:https://www . geesforgeks . org/type-conversion-Java-examples/

Java 提供了各种数据类型,就像任何其他动态语言一样,如布尔、char、int、无符号 int、有符号 int、float、double、long 等,总共提供了 7 种类型,其中每种数据类型在存储在内存中时都会获得不同的空间。当您将一种数据类型的值赋给另一种数据类型时,这两种类型可能不兼容。如果数据类型兼容,那么 Java 将自动执行转换,称为自动类型转换,如果不兼容,则需要显式转换。例如,给长变量赋值。

| data type | Bits obtained in memory | | --- | --- | | boolean type | one | | byte | 8 (1 byte) | | 茶 | 16(2 bytes) | | short | 16(2 bytes) |

加宽或自动类型转换

当自动转换两种数据类型时,会发生扩展转换。这种情况发生在:

  • 这两种数据类型是兼容的。
  • 当我们将较小数据类型的值赋给较大数据类型时。

例如,在 java 中,数字数据类型相互兼容,但是不支持从数字类型到 char 或 boolean 的自动转换。此外,char 和 boolean 彼此不兼容。

Widening or Automatic Type Conversion

示例:

Java 语言(一种计算机语言,尤用于创建网站)

// Java Program to Illustrate Automatic Type Conversion

// Main class
class GFG {

    // Main driver method
    public static void main(String[] args)
    {
        int i = 100;

        // Automatic type conversion
        // Integer to long type
        long l = i;

        // Automatic type conversion
        // long to float type
        float f = l;

        // Print and display commands
        System.out.println("Int value " + i);
        System.out.println("Long value " + l);
        System.out.println("Float value " + f);
    }
}

Output

Int value 100
Long value 100
Float value 100.0

缩小或显式转换

如果我们想将一个较大数据类型的值赋给一个较小的数据类型,我们执行显式类型转换或收缩。

  • 这对于无法自动转换的不兼容数据类型非常有用。
  • 这里,目标类型指定要将指定值转换为的所需类型。

Narrowing or Explicit Conversion

字符和数字不兼容。让我们看看什么时候我们试着把一个转换成另一个。

Java 语言(一种计算机语言,尤用于创建网站)

// Java program to illustrate Incompatible data Type
// for Explicit Type Conversion

// Main class
public class GFG {

    // Main driver method
    public static void main(String[] argv)
    {

        // Declaring character variable
        char ch = 'c';
        // Declaringinteger variable
        int num = 88;
        // Trying to insert integer to character
        ch = num;
    }
}

输出:将产生错误

此错误是由于整数变量需要 4 个字节而字符数据类型需要 2 个字节而产生的。我们试图将数据从 4 字节绘制成 2 字节,这是不可能的。

如何进行显式转换?

Java 语言(一种计算机语言,尤用于创建网站)

// Java program to Illustrate Explicit Type Conversion

// Main class
public class GFG {

    // Main driver method
    public static void main(String[] args)
    {

        // Double datatype
        double d = 100.04;

        // Explicit type casting by forcefully getting
        // data from long datatype to integer type
        long l = (long)d;

        // Explicit type casting
        int i = (int)l;

        // Print statements
        System.out.println("Double value " + d);

        // While printing we will see that
        // fractional part lost
        System.out.println("Long value " + l);

        // While printing we will see that
        // fractional part lost
        System.out.println("Int value " + i);
    }
}

Output

Double value 100.04
Long value 100
Int value 100

注意:当给字节类型赋值时,小数部分丢失,并减少到模 256(字节范围)。

示例:

Java 语言(一种计算机语言,尤用于创建网站)

// Java Program to Illustrate Conversion of
// Integer and Double to Byte

// Main class
class GFG {

    // Main driver method
    public static void main(String args[])
    {
        // Declaring byte variable
        byte b;

        // Declaring and initializing integer and double
        int i = 257;
        double d = 323.142;

        // Display message
        System.out.println("Conversion of int to byte.");

        // i % 256
        b = (byte)i;

        // Print commands
        System.out.println("i = " + i + " b = " + b);
        System.out.println(
            "\nConversion of double to byte.");

        // d % 256
        b = (byte)d;

        // Print commands
        System.out.println("d = " + d + " b= " + b);
    }
}

Output

Conversion of int to byte.
i = 257 b = 1

Conversion of double to byte.
d = 323.142 b= 67

表达式中的类型提升

在计算表达式时,中间值可能超过操作数的范围,因此表达式值将被提升。类型升级的一些条件是:

  1. 在计算表达式时,Java 会自动将每个字节、短操作数或字符操作数提升为 int。
  2. 如果一个操作数是 long、float 或 double,则整个表达式将分别提升为 long、float 或 double。

示例:

Java 语言(一种计算机语言,尤用于创建网站)

// Java program to Illustrate Type promotion in Expressions

// Main class
class GFG {

    // Main driver method
    public static void main(String args[])
    {

        // Declaring and initializing primitive types
        byte b = 42;
        char c = 'a';
        short s = 1024;
        int i = 50000;
        float f = 5.67f;
        double d = .1234;

        // The Expression
        double result = (f * b) + (i / c) - (d * s);

        // Printing the result obtained after
        // all the promotions are done
        System.out.println("result = " + result);
    }
}

Output

result = 626.7784146484375

表达式中的显式类型转换

计算表达式时,结果会自动更新为操作数的较大数据类型。但是,如果我们将结果存储在任何较小的数据类型中,就会产生编译时错误,因此我们需要对结果进行类型转换。

示例:

Java 语言(一种计算机语言,尤用于创建网站)

// Java program to Illustrate Type Casting
// in Integer to Byte

// Main class
class GFG {

    // Main driver method
    public static void main(String args[])
    {

        // Declaring byte array
        byte b = 50;

        // Type casting int to byte
        b = (byte)(b * 2);

        // Display value in byte
        System.out.println(b);
    }
}

Output

100

注意:在单个操作数的情况下,结果被转换为 int,然后相应地进行类型转换,如上例所示。

本文由阿普尔瓦辛格供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用write.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。