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

Java:为什么我不能将int转换为Long

苏涛
2023-03-14
问题内容

Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的

Short s = 1; // Will compile to Short s = Short.valueOf((short)1) - thus you can't exceed short max value i.e.
Short s =  4444; // is invalid for autoboxing

同样的机制IntegerByte实例。但是龙的作品完全不同。以下代码给出了编译时错误

Long l = 10;

Long对长类型使用自动装箱方法,因此

Long l = 10L; //is valid and is translated into Long.valueOf(10L)

我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗?


问题答案:

我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lang.Short之间的区别。

JLS:“此外,如果该表达式是类型为byte,short,char或int的常量表达式(第15.28节):

  • 如果变量的类型为byte,short或char,并且常量表达式的值可表示为变量的类型,则可以使用缩窄的原始转换。
  • 如果变量的类型是:
    • 字节和常量表达式的值可以在类型字节中表示。
    • 短,常量表达式的值可以用短类型表示。
    • 字符和常量表达式的值可以用char“类型表示。

因此,所有<= 32bit的原语都可以轻松地进行转换,而长(64bit)则需要特殊的转换。这似乎是不合逻辑的。

照常,所有不合逻辑的事情都可以解释Java的向后兼容性或历史演变。例如,从1.0版开始,java中就存在Integer和Long类。从1.1开始,java中就存在Short和Byte类。即在起点处整数可以是两种类型:整数或长整数。因此,我认为这两种数字有不同的转换规则。然后添加了short和byte。我想short和byte在具体的JVM中可以有32位实现。



 类似资料:
  • 问题内容: 您可以将int隐式转换为double: 您可以将int显式转换为double: 您可以将double显式转换为int: 为什么不能将一个double隐式转换为int? : 问题答案: 的范围比宽。这就是为什么您需要显式强制转换。由于相同的原因,您不能隐式地从转换为:

  • 我刚开始编程,我总是收到错误消息,“不兼容的类型,int不能转换为int[]”,问题是如果R1和R2的长度相等,就把它们加在一起,如果不是,打印一条消息,说“数组必须是相同的长度”,如果这很重要,不确定我在哪里出错了,任何帮助都将非常感谢

  • 我正在为一个类编写一个单元测试,如下所示: 现在,当我运行这段代码时,它给我一个错误,即我无法将强制转换为Java中的集合。 ps:有一个单独的类,名为,它的setter如下所示: 而我正在尝试使用上面的这种方法。

  • 问题内容: 所以这工作: 但这不是: 总而言之,我得到了第一部分(拳击),但是我发现第二部分不起作用是非常不直观的。是否有特定的原因(除了String从Object继承而int不从Object继承)? 编辑: 为了完善我的问题,这也可以: 但是,以下内容却没有: 令人惊讶的是,您遇到了与String相同的问题: 在最后一行产生类强制转换异常。仍然有效: 问题答案: 我刚刚找到了我正在寻找自己的答案

  • 问题内容: 我发现了一些奇怪的异常: 怎么可能呢?每个对象都可以转换为String,不是吗? 代码是: 谢谢。 问题答案: 为什么这不可能: 因为String和Integer不在同一对象层次结构中。 您尝试的转换仅在相同的层次结构中有效,例如 在这种情况下,或或将起作用。 因此,正如其他人已经提到的,要将整数转换为字符串,请使用: 或对于原始 要么 为对象。

  • 问题内容: 我将从3个简单的示例开始: 所有这些都是预期的。这是一个更复杂的示例。 也符合预期。但是,如果我 每个@unutbu的答案 熊猫正尝试将其重铸为原始dtype。我以为,也许我演奏过的组并没有真正地进行分组。所以我尝试了这个例子来测试这个想法。 我会和。如果@unutbu是正确的,则这些和应该是和,并且可以强制转换为,因此我们应该看到 果然… 但是,如果过程相同但值略有不同。 学过的知识