gpt4 book ai didi

java - Java中转换的模糊概念

转载 作者:行者123 更新时间:2023-11-30 05:25:55 28 4
gpt4 key购买 nike

我真的发现转换的概念很令人困惑。

short a = 34;
short b = (short)34;

这两个语句之间有什么语言差异?我认为,在第一个语句中,int 文字 34 直接存储在短变量 a 中,导致 int 文字 34 转换为短文字 34。而在第二个语句中,似乎 int 文字 34 首先转换为由于转换指令,短文字 34 然后存储在短变量 b 中。我是正确的还是这两种情况之一?

最佳答案

What is the functional difference between these two statements?

此示例中没有功能差异。在这个例子中,最终结果是相同的。

从(Java)语言的角度来看,这是两种不同的情况:

short b = (short) 34;

数字34是一个int文字。 (短) 是执行显式缩小基元转换的类型转换。如有必要,这将截断该值,尽管这里没有必要。然后,您将获得一个分配给变量的short值,无需进一步转换。

short b = 34;

数字34是一个int文字。在这种情况下,存在隐式的缩小原始转换。这种“特殊情况”发生在赋值上下文中:

  1. 正在计算的表达式是编译时常量表达式,AND
  2. 变量的类型为bytecharshort,AND
  3. 表达式的值可以用变量的类型表示。

这不会截断该值。

<小时/>

如果将代码更改为以下内容,则两个上下文之间的差异将变得明显:

short a = 100000;          // Compilation error because 100,000 is too large
short b = (short) 100000; // OK - 100,000 is truncated to give -31,072

或者:

int x = 34;
short y = x; // Compilation error because 'x' is NOT
// a constant expression
<小时/>

JLS 最相关的部分是 5.2 Assignment Contexts5.4 Casting Contexts .

关于java - Java中转换的模糊概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58623481/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com