java - 为什么我需要在 byte 和 short 上显式转换 char 原语?

标签 java casting char byte short

关于基元:当我从较小的类型转换为较大的类型时,转换是隐式的,当我从较大的类型转换为较小的类型时,我需要显式转换基元,由于数据丢失,这一点很明显。但是有些东西我不明白。在某些情况下(字节和短),当我向上或向下转换为 char 时,尽管字节(8 位)适合 char(16 位),但我总是需要在两个方向上显式转换?

(另见 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

看我的例子...

public class CastingTest
{
    public static void main(String[] args)
    {
        //casting from smaller to bigger types
        short c = 13;
        int d = c;

        byte f = 34;
        short g = f;

        byte h = 20;
        long i = h;

        byte var03 = 6;
        double var04 = var03;   

        //casting from bigger to smaller types
        int j = 12;
        short k = (short)j;

        long m = 56;
        int n = (int)m;

        double o = 19;
        short p = (short)o;

        //not possible without explicit cast, but why?
        byte var01 = 3;
        char var02 = (char)var01;

        short var05 = 5;
        char var06 = (char)var05;

        char var07 = 'k';
        short var08 = (short)var07;
    }
}

最佳答案

char 是 Java 唯一的unsigned 类型,因此它的值范围不完全包含任何其他 Java 类型的值范围。

对于目标类型范围未完全覆盖源类型范围的任何转换,您必须使用显式转换运算符。

关于java - 为什么我需要在 byte 和 short 上显式转换 char 原语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129732/

相关文章:

java - 如何设置background-repeat : no-repeat in element.风格

java - 类文件版本 57.0,该版本的 Java 运行时仅识别 52.0 以下的类文件版本

java - Selenium WebDriver - 两部分 - 1) AssertEquals 失败测试失败 2) 验证元素不存在

c++ 我无法理解 const char* 和 char* 之间的区别

java - 自定义 validator 停止 spring 内部验证

python - 更改 Pandas 的列类型

c# - 为什么我不能将 Action<Int32> 转换为 Action<Object>?

c - 内存大小加载和存储惩罚分析?

c++ - 如何将 char[41] 转换为 char[40]

c++ - 在 C++ 中通过套接字发送图像