短暂重载char

use*_*676 2 java

char大小为16位,短大小为16位.如果我们有一个接受short参数的构造函数,如果我们将char传递给它,为什么即使char和short的大小相同,它也不会接受?

import java.util.*;

public class Coffee {

    Coffee(short s2) {
        System.out.println("short accepted");
    }

    public static void main(String[] args) {
        Coffee c=new Coffee('c');
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能传递char给接受的构造函数short

JB *_*zet 7

JLS定义了从char到short的转换,作为缩小转换.并且它是预期的,因为char是无符号的2字节整数,而short是带符号的2字节整数.因此,一半的char值不能用short来表示.

因此,您必须明确地将char转换为short以告诉编译器您知道这样的转换可能会丢失信息.