当前位置: 首页 > 知识库问答 >
问题:

显式将long转换为int和隐式将long转换为float

于飞飙
2023-03-14
public class Casting {
    public static void main(String[] args){
        int I = 1;
        long L = 1;
        float F = 1;
        double D = 1;

        L = I; // int always fits into long, no problem here
        I = L; // Error: Type mismatch: cannot convert from long to int
               // long not always can fit into int, so explicit casting is required. Seems logical.
               // But at the moment magnitude of L fits into I, and casting can be done without truncation 

        F = L; // This doesn't produce any error, and casting is done implicitly.
               // In this case magnitude of L also fits into F

    }
}

所以,问题是--为什么在I=L的情况下,当L的大小足够小到适合I时,必须显式地进行,但在F=L的情况下,当L的大小也适合F时,铸造可以隐式地进行,而不会产生错误。

我的意思是,在这两种情况下,右操作数的大小可能不适合左操作数。那么,为什么在一种情况下(I=L),强制转换必须显式进行,而在另一种情况下(F=L)可以隐式进行呢?虽然隐式地将长var转换为int var比隐式地将长var转换为浮点var看起来更自然(假设值足够小以相互匹配)

共有1个答案

闻人德庸
2023-03-14

Long.max_value=(2^63)-1
Float.max_value=2^127
所以Long值总是适合Float值。
编译器不会分析代码中的实际值。它从不验证该值是否合适。

 类似资料:
  • 我正在解决一个问题,其中的任务是在用户提到的给定行输出pascal三角形的结果。 https://leetcode.com/problems/pascals-triangle-ii/ 我写了我的解决方案,其中有存储巨大阶乘结果的问题。 通过这些问题, 整数类型可以在C中存储哪些范围的值 长到无符号的字节数是多少? 并通过其他一些来源,我进行了以下更改,这给了我所需的结果。 由于“C”是int类型,

  • 考虑此代码段: 在我的机器上运行这个会打印两个转换的。但是和只能是吗? 据我所知,这是一个扩展的原语转换,规范中说: 拓宽的基元转换不会丢失有关数值的整体大小的信息。 以及 将int或long值加宽为float或将long值加宽为double可能会导致精度损失 据我所知,上述规范意味着将始终成为,但可以转换为其他内容(例如或类似内容)。我的规格解释正确吗?

  • 问题内容: 如何在Java中将值转换为值? 问题答案: 或如果您不必担心null: 在这两种情况下,您都可能会遇到溢出问题(因为Long可以比Integer存储更大的范围)。 Java 8有一个辅助方法来检查溢出(在这种情况下,您会得到一个异常):

  • 问题内容: 我可以隐式地将int转换为long,并将long转换为Long。为什么无法将int隐式转换为Long?为什么Java不能在示例的最后一行进行隐式转换? 问题答案: 和是对象。装箱/拆箱仅适用于原语。做的就像,那不是不!另外,请记住,之间没有继承,所以甚至无效

  • 问题内容: 我需要使用反射获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: 并使用如下方法: 要么 问题是我似乎无法转换为: 有没有更好的方法来实现这一目标? 我正在使用Java 1.6。 问题答案: 不,即使可以从转换为,也无法转换为。对于已知为数字的 单个 值,并且想要获得长整型值,可以使用: 对于数组,这将比较棘手…

  • 我正在编写一个jenkins管道,我需要将String参数转换为Long值。 我已经使用Long.value,Long.parse。我得到这个错误消息: Hudson . remoting . proxy exception:groovy . lang . missingmethodexception:没有方法的签名:java.lang.Class.parseLong()适用于参数类型:(java