java - 为什么当内联转换并赋值时它会编译?

标签 java casting type-conversion

这是我的示例代码

class Example{
    public static void main(String args[]){


        short s = 100;
        byte b = s;         // this is compile time error because of no casting

        byte z = (short)25.12; // why this happens 

        System.out.println(z);
        System.out.println(((Object)z).getClass());

    }
}

请原谅我,因为我刚刚开始学习java。 你能从技术上告诉我这个问题吗?

最佳答案

  1. 您的此行 byte b = s; 会出错,因为您无法将较大的数据类型 short(2 bytes) 分配给较小的数据类型 byte( 1 字节)。这就是为什么它会给你编译时错误。
  2. 现在来到这一行byte z = (short)25.12;,让我们对其进行分解。 25.2 默认情况下是 double,但是当您使用 (short) 对其进行类型转换时,它会变成 25,这是一个 >整体文字。现在编译器将检查 25 是否可以存储在字节中。由于 5 介于 -128 和 127 之间,即字节范围,因此不会给出任何编译时错误。但如果你给出的任何值超出了字节范围,就会出错。例如:byte z = (short)128.12;

关于java - 为什么当内联转换并赋值时它会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901397/

相关文章:

c++ - 向下转换并同时从 const 转换为 non-const

c - 为什么这个程序输出 Yes,而它应该抛出错误或 NO

c++11 - gcc 是否错误地不诊断非类型模板参数中的缩小转换?

java - 我使用 SImpleDateFormat 面临法语语言环境的 ParseException

java - 我想返回 ResultSet 时在哪里关闭 JDBC 连接

C# - Linq 将泛型列表转换为自定义类

C++将字符串转换为空指针

node.js - 将字符串转换为数字 node.js

java - 如何从 firebase 读取子数据

java - Spring 中 ContextLoaderListener 的作用/目的?