当前位置: 首页 > 面试题库 >

缩小类型转换:为什么在声明中允许将int分配给字节?

司马作人
2023-03-14
问题内容

对于中级Java程序员来说,这听起来太琐碎了。但是在审查Java基础知识的过程中,发现了一个问题:

为什么缩小转换范围,例如:

byte b = 13;

将被允许

int i = 13;
byte b = i;

会被编译器抱怨吗?


问题答案:

因为byte b = 13 ;是常量的赋值。它的值在编译时是已知的,因此,如果常量值的赋值会导致溢出,则编译器可以/应该/会抱怨(尝试byte b = 123456789 ;看看会发生什么。)。

将其分配给变量后,便要分配一个 表达式 的值,尽管它很可能是不变的,但编译器并不知道这一点。该表达式 可能 导致溢出,因此编译器发牢骚。



 类似资料:
  • 问题内容: AsicII表:http://www.asciitable.com 下面的代码打印出相应字符的Dec值,例如“ 123”-> 49 50 51 但是我注意到java是一种强类型语言,这意味着必须在编译时进行所有转换,但是代码如何知道如何以及何时将char转换为AsicII表中正确的Dec值呢?我弄乱了任何Java /编程基础知识吗? 问题答案: A 只是一个无符号的16位数字,因此,由

  • 问题内容: 我从编译器收到的错误是“分配的左侧必须是变量”。我的用例是深度复制,但并没有实际意义。 在C ++中,可以分配给。 问题不在于如何规避对的分配。这很简单,但是决定不进行变量的背后是什么原理。 原因是技术上的还是概念上的? 到目前为止,我的猜测-用随机方法重建对象的可能性容易出错(概念上),但在技术上是可行的。 编辑 请避免使用“因为Java规范这么说”的变体。我想知道 这个决定 的 原

  • 问题内容: 这是我的代码,但是我没有得到方法如何接受类型作为返回值。如何运作?谁能解释一下这种方法的工作原理? 提前致谢 :) 问题答案: 好的,所以首先要做的是: 这是一个不断扩大的原始类型转换,因此这是合法的。您可以: 但是您不能: 第二:它返回的根本不是ASCII码。Java执行Unicode。 碰巧的是,当创建Java时,Unicode仅定义了适合16位的代码点。因此,它被创建为2字节的无

  • 问题内容: Java将原始数据类型包装到包装器类,然后为什么 不允许,但 被允许。 问题答案: 因为原语表示 值, 而对象变量表示对复杂数据对象的 引用 (类似于指针)。 没有通用的null值,它是一个特殊的关键字,它“不引用任何内容”或为空引用 -这是非常不专业的答案,但我想它会是最合适的。 此外,您认为null的数值是多少?0?-1?但是,这些是有效的整数,那又是什么? 我强烈建议您开始熟悉以

  • 这是对我上一个问题的延续,并同意这个问题的答案 包装类声明 Java将原始数据类型包装到包装类中,那是为什么呢 不允许,但 是允许的。