【问题标题】:Understanding char cast了解字符转换
【发布时间】:2020-10-09 21:40:25
【问题描述】:

我不理解 java 中的转换,尤其是字符转换。我无法预测这段代码的结果,因为我不明白 char 的转换会“重现”什么。一些解释会很棒!谢谢

public class test {
    public static void main(String[] args) {



    int u = 10;

        double v = 22.105;

        byte w = 100;

        char x = 'a';

        float y = 20.5f;

        short z = 50;

        double d_Value = (float) ((char) (u/v) + y);

        Out.print(d_Value);

    }}

【问题讨论】:

    标签: java casting char


    【解决方案1】:

    char 是一个基于整数的数据类型,所以你会失去 u/v 上双精度结果的精度,给你一个 0 数字(或 \0 字符)。然后它为最终结果添加 20.5F:20.5

    转换比语言中的大多数运算符具有更高的优先级,因此转换在 + 操作之前是相关的。

    【讨论】:

    • 那么在 u/v 和 char 转换之后,u/v 除法的值是多少? 0?
    • 在演员表之前,它是(int) u / (double) v,导致double(因为两个不匹配的数据类型被提升为双精度)。所以此时的值为0.45238...,但通过将其转换为char(类似于转换为int),该数字变为0
    • 哦,好吧,所以基本上 char 的行为就像您将其转换为 int 一样?谢谢!
    • Java 在他们的教程中有一个运算符优先级表,但我还没有找到用于转换优先级的官方/JLS 源。与数组下标 ([ index ]) 和成员访问 (.) 一起,强制转换 ((type)) 的优先级高于任何算术运算符,并且在它们之前进行评估。 u/v 首先被评估的唯一原因是因为它是一个括号括起来的表达式
    • 没错,它们很相似,但char 的最大尺寸较小;如果你有更大的数字要处理,你必须开始担心溢出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2019-01-31
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多