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

了解缩小原始转换

松安民
2023-03-14
问题内容

我试图理解Java中日益缩小的原始转换概念。这是JLS
5.1.3
所说的:

关于原始类型的22种特定转换称为“缩小原始转换”:

短字节或字符

字符到字节或短

从int到byte,short或char

长到字节,短,字符或整数

浮点到字节,short,char,int或long

双精度字节,短整数,字符,整数,长整数或浮点数

由于是隐式转换转换longint,我们可以写出下面的代码:

public static void main (String[] args) throws java.lang.Exception
{
    int c = 88L; //Compilation fail
    System.out.println(c);
}

演示

但这是行不通的。为什么?从long到int的缩小转换应该已经应用。


问题答案:

由于存在隐式转换,因此将long转换为int

没有。有一个 明确的 转换。缩小转换通常不会隐式应用,正是因为它们会丢失信息。因此,您需要:

int c = (int) 88L;

实际上,JLS第5节的开头部分甚至给出了一个示例

// Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5f;

但是,在某些情况下,缩小转换 明确地应用于分配上下文(JLS
5.2)

此外,如果表达式类型的常量表达式(§15.28) ,byteshortcharint

  • 如果变量的类型是byteshortchar,并且常量表达式的值在变量的类型中可表示,则可以使用变窄的原始转换。

  • 如果变量的类型为:变窄的原始转换,然后是装箱转换,可以使用:

    • Byte常量表达式的值在类型中是可表示的byte

    • …(与Short和类似Character

这就是为什么 是即使字面的类型有效的120int

byte x = 120;

将其与扩展转换(分配上下文 调用上下文中允许的转换)进行比较(JLS
5.3
)。



 类似资料:
  • 我是一年级计算机科学学生。我们刚刚开始学习java。我们的教授给我们讲了加宽的事,但是我有些不明白,也许你可以帮助我。当你做下面的运算(double * int)(char/-short)–(float * byte)答案会是double。但是,老师也告诉我们,答案只是针对(char /-short)会是float。为什么浮动? 谢谢

  • 我已经使用这个带有Azure函数和NodeJS文章的背景图像缩略图处理来创建一个缩略图。已成功创建映像。但是图像的尺寸增加了。这是怎么发生的?它一定很小不是吗?我该如何解决这个奇怪的问题? 这是Blob存储器上的原始图像 处理后(缩略图) 这是 Azure 函数(节点):

  • 当对象相加 obj1 + obj2,相减 obj1 - obj2,或者使用 alert(obj) 打印时会发生什么? 在这种情况下,对象会被自动转换为原始值,然后执行操作。 在 类型转换 一章中,我们已经看到了数值,字符串和布尔转换的规则。但是我们没有讲对象的转换规则。现在我们已经掌握了方法(method)和 symbol 的相关知识,可以开始学习对象原始值转换了。 所有的对象在布尔上下文(con

  • 我正在阅读Java语言的规范,关于赋值的转换,我试图获得基本规则,有些文献让我很困惑。有一些出版物说: 要求加宽基元转换后接装箱转换。这不是允许的转换。我理解编译错误和作业的上下文。但真的是一个扩大的原始转换?我的理解如下:Integer<-Short<-Short<-int我看到Integer和Short之间的加宽。还是我糊涂了?

  • 我有模量 目前,我正在提取完整的260个字节(指数为4个字节,模数为256个字节)并编码为base 64。我使用以下shell命令这样做: 这给我以下字符串: 现在,当我拿钥匙的时候。pem密钥对表示模数 我得到这个字符串(我已经省略了标题 您可以看到,我提取的密钥数据和base64编码的密钥数据实际上存在于从密钥中提取的有效公钥数据的数据中。pem使用openssl。然而,开头有45个字符,我自

  • 问题内容: 我有一个Oracle表,其中包含LONG RAW类型的字段,该字段包含ASCII字符数据。如何编写查询或视图,将其转换为更容易使用的字符串?这些总是FWIW单字节字符。 问题答案: 可能是 (http://www.psoug.org/reference/convert_func.html) 或者 (http://www.dbasupport.com/forums/showthread.