短暂重载char

时间:2014-07-06 06:43:46

标签: 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');
    }
}

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

char未签名而short已签名...您无法将所有char - 可能的值存储在short中。

char存储16位:[0,65535]而short存储16位:[ - 32768,32767]。

例如,您无法代表char中的小数值为63000的short,而short可以存储值-213,而char则不能。{ / p>

请注意,如果编译器知道值适合,则不需要显式转换就可以使用。

请参阅the docs以更好地了解此问题:

  

short:短数据类型是16位已签名的两个补码   整数。它的最小值为-32,768,最大值为    32,767 (含)。与字节一样,适用相同的准则:您可以   在大型数组中使用short来节省内存   记忆储蓄实际上很重要。

     

char:char数据类型是单个16位Unicode字符。它有   最小值为' \ u0000' (或0)和' \ uffff'的最大值(要么    65,535 包括在内。