>  기사  >  Java  >  Java의 자동 유형 변환 메커니즘의 예 및 분석

Java의 자동 유형 변환 메커니즘의 예 및 분석

WBOY
WBOY앞으로
2023-04-21 11:13:161676검색

자동 유형 변환 메커니즘 분석

개요

  • 자동 유형 변환은 암시적 유형 변환이라고도 합니다.

  • 표현식의 데이터 유형이 자동으로 승격됩니다.

모든 바이트, 짧은 및 문자 값 ​​int를 입력하도록 승격됩니다.

피연산자가 long 유형이면 계산된 결과는 long입니다.

피연산자가 float 유형이면 계산된 결과는 float 유형입니다.

피연산자가 double 유형이면 계산된 결과는 다음과 같습니다. 더블형.

데이터형은 자동으로 증가만 하고 자동으로 감소는 하지 않습니다

int 값은 long, float, double 형 변수에 할당할 수 있지만 byte, short, char 형 변수에는 할당할 수 없습니다

Java의 자동 유형 변환 메커니즘의 예 및 분석

동일합니다 함수 매개변수의 경우

Java의 자동 유형 변환 메커니즘의 예 및 분석

물론 함수 오버로딩의 경우 Java 컴파일러는 호출할 가장 일치하는 함수를 자동으로 선택합니다

Java의 자동 유형 변환 메커니즘의 예 및 분석

Java에서 정수의 기본 데이터 유형은 int 유형입니다

모두 int보다 길이가 작은 타입(byte, short, char)의 결과는 연산 후 int 타입으로 승격됩니다

Java의 자동 유형 변환 메커니즘의 예 및 분석

물론 할당 연산을 수행할 때 이런 상황이 발생하기 때문입니다. , Java 컴파일러는 연산 결과가 byte 또는 short의 값 범위를 초과하는지 명확하게 알 수 있으므로 byte a = 1 + 1은 오류를 보고하지 않습니다. 위의 byte c = a + b; 컴파일 오류가 발생하는 이유는 a와 b가 모두 변수이고, 추가된 결과가 byte의 값 범위를 초과할지 여부를 컴파일러가 알 수 없기 때문에 컴파일러는 결과를 int 유형으로 승격시킵니다. .

Java의 자동 유형 변환 메커니즘의 예 및 분석

요약하자면:

  • 정수 연산 결과가 int의 표현 범위에 도달하지 못한다는 것을 컴파일러가 명확하게 알고 있는 경우 byte, short 또는 char 유형의 연산 결과는 자동으로 int로 승격되지 않습니다. type

  • 정수 연산 결과가 int의 표현 범위에 도달하는지 여부를 컴파일러가 명확하게 알거나 알 수 없는 경우 컴파일러는 원래 byte, short 또는 char 유형이더라도 연산 결과를 int로 자동 변환합니다.

자동 유형 변환 및 강제 유형 변환

언제 유형 변환이 발생합니까?

답변: 할당 작업 중에 양쪽의 데이터 유형이 일치하지 않으면 유형 변환이 발생합니다

다음과 같습니다:

public class TypeTest {
    public static void main(String[] args){
       	// 运算时发生的隐式类型转换,两整数相除得到的还是一个整数
        byte a  = 3;
        byte b = 4;
        int num  =  a + b;
        System.out.println(num); // 7
        // 赋值时发生的隐式类型转换
        int ch = '0';
        System.out.println(ch); // 48
        // 运算时发生的强制类型转换
        byte a1 = 12;
        byte a2 = 12;
        byte num1 = (byte)(a1  + a2);
        System.out.println(num1); // 24
        // 赋值时发生的强制类型转换
        short b3 = 1234;
        byte a3 = (byte) b3;
        System.out.println(a3); // -46
    }
}

실행 중 스크린샷:

Java의 자동 유형 변환 메커니즘의 예 및 분석

유형 변환 분류

  • 자동 유형 변환

  • 강제 유형 변환

자동 유형 변환(암시적 유형 변환)

규칙: 소형에서 대형으로, 낮은 바이트에서 높은 바이트

순서의 자동 승격:

byte(1바이트) > short(2바이트) -- > int(4바이트) > (4바이트) > double(8바이트)

char(2바이트)-- > long(8바이트) > ; 더블(8바이트)

그림 분석:

Java의 자동 유형 변환 메커니즘의 예 및 분석

코드 표시:

public class TypeDemo {
    public static void main(String[] agrs){
        // byte -- > short
        byte b1 = 127;
        short s1 = b1;
        System.out.println(s1); // 127
        // short -- > int 
        short  s2 = 30000;
        int i = s2;
        System.out.println(i); // 30000
        // int  -- > long
        int num = 2100000000;
        long lg = num;
        System.out.println(num); // 2100000000
        // long -- > float 
        long lg1 = 200000000000000L;
 	    float f1 = lg1;
        System.out.println(f1);// 2.00000001E14
        // float -- > double 
        float f2 = 3.14f;
        double d1 = f2;
 	    System.out.println(d1); // 3.140000104904175
        // char -- > int
	    char ch = 'a';
        int i1 = ch ;
        System.out.println(i1); // 97
        // char -- > long
        char ch2 = 'b';
        long lg2 = ch2;
        System.out.println(lg2); // 98
        // char  -- >  double
        char ch3 = 'c';
        double dou = ch3;
        System.out.println(dou); // 99.0
        // char -- > float
        char ch4 = 'd';
        float  f3 = ch4;
        System.out.println(f3); // 100.0
    }
}

실행 스크린샷:

Java의 자동 유형 변환 메커니즘의 예 및 분석

참고:

byte 및 short는 char로 변환할 수 없습니다.

코드 표시:

public class TypeDemo2 {
    public static void main(String[] agrs){
 	    // byte -- > char
        byte bt = 127;
        char ch = bt;
        System.out.println(ch);
        // short -- > char
        short sh = 12;
        char ch2 = sh;
        System.out.println(ch2);
    }
}

컴파일 오류 스크린샷:

Java의 자동 유형 변환 메커니즘의 예 및 분석

float는 4바이트이지만 float는 long보다 더 큰 데이터 범위를 나타냅니다. 데이터 범위의 크기와 바이트의 크기가 반드시 관련이 있는 것은 아님을 보여줍니다.

코드 표시:

public class TypeDemo3 {
    public static void main(String[] agrs){
        long lg = 20000000000000L;
        float f1 = lg;
        System.out.println(f1); // 1.99999997E13
    }
}

실행 스크린샷:

Java의 자동 유형 변환 메커니즘의 예 및 분석

부울 유형은 유형 변환에 참여할 수 없습니다.

코드 표시:

public class TypeDemo4 {
    public static void main(String[] agrs) {
        boolean flag = 12;
        int flag1 = flag;
        System.out.println(flag1);
    }
}

컴파일 오류 스크린샷:

Java의 자동 유형 변환 메커니즘의 예 및 분석

강제(명시적 유형 변환)

규칙: 큰 크기에서 작은 크기로, 높은 바이트에서 낮은 바이트로 수동 강제 변환

순서:

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > short (2字节)-- > byte(1字节)

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > char(2字节)

画图分析:

Java의 자동 유형 변환 메커니즘의 예 및 분석

(掌握)格式:目标数据类型 变量名 = (目标数据类型) 变量 | 常量;

代码展示:

public class TypeDemo5 {
    public static void main(String[] agrs){
        // float -- > long
        // final float  PI = 3.14f;
        // long num = (long) PI; // 3
        // float little =  3.14f;
        // long num = (long)little; // 3
 	    long num = (long)3.14f;      
        System.out.println(num);// 3 
        // double -- > float 
        // double dou = 3.14;
        // float little1 = (float)dou; // 3.14
        //  float little1 = (float) 3.14d;  // 3.14
        final double  dou = 3.14;
        float little1 = (float)dou;
        System.out.println(little1); // 3.14
        // long -- > int 
        // long  num1 = 2000000000000L;
        // int   num2 = (int)num1;  // -1454759936
        // int num2 = (int)2000000000000L; // -1454759936
       	final  long num1 = 2000000000000L;
        int num2 = (int)num1;
        System.out.println(num2);  // -1454759936
        // int --> short
        // int  num3  = 12;
        // short num4 = (short)num3; // 12
        // short num4 = (short)40000; // -25536
        final int num3 = 60;
        short num4 = (short)num3;
        System.out.println(num4); // 60
        // short -- > byte
        final short sh = 12345;
        byte bt = (byte)sh;
        System.out.println(bt); // 57
        short sh2 = 78;
	    bt = (byte) sh2;
        System.out.println(bt); // 78
    }
}

运行截图:

Java의 자동 유형 변환 메커니즘의 예 및 분석

注意:

强制类型转换有数据丢失,一般不建议使用

代码展示:

public  class TypeDemo6 {
   public static void main(String[] agrs) {
       short a = 1245;
       byte b = (byte)a;
       System.out.println(b);
   } 
}

运行截图:

Java의 자동 유형 변환 메커니즘의 예 및 분석

위 내용은 Java의 자동 유형 변환 메커니즘의 예 및 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제