【问题标题】:Switch case with character and ascii value behave same in java具有字符和 ascii 值的 switch case 在 java 中的行为相同
【发布时间】:2016-11-30 09:50:23
【问题描述】:

具有 ascii 值或字符的 switch case 的行为如何?

大小写如何在内部将ascii转换为char或char到ascii

public class Rq200_150 {

    public static void main(String[] args) {

        for (Character cRef = 'A'; cRef < 'F'; cRef++)
            switch (cRef) {
            default:
                System.out.println((char) ('a' + cRef - 'A'));
                break;
            case 'B':
                System.out.println(cRef);
                break;
            case 68:
                System.out.println(cRef);
                break;
            case 67:
                System.out.println(cRef);
            }
    }

}

【问题讨论】:

  • 问题/问题是什么?你能详细说明一下吗?
  • 虽然我把 case 68 这是字符 D 的 ascii,但它正在考虑为 case D.. 所以我的问题是 switch case 是如何知道 68 是 D 的 ascii 值......我们是为 switch 案例提供 cRef 即字符,然后它如何接受 68,67 个数字案例
  • 68 是 D 的 unicode(和 ascii)值,char 可以转换为 int:docs.oracle.com/javase/tutorial/java/nutsandbolts/…
  • 表示 switch case 在执行时内部做这个转换??
  • Character。 (ASCII 与它无关。)

标签: java char switch-statement ascii


【解决方案1】:

对某些运算符的操作数执行二进制数字提升:

例如: 数值比较运算符 和 >=

如果任何操作数是引用类型,则对其进行拆箱 转换(第 5.1.8 节)。

加宽基元转换(第 5.1.2 节)用于转换或 两个操作数均由以下规则指定:

如果任一操作数是 double 类型,则另一个将转换为 double。

否则,如果任一操作数为浮点类型,则转换另一个 浮动。

否则,如果任一操作数是 long 类型,则转换另一个 长。

否则,两个操作数都转换为 int 类型。

所以在这种情况下,它将被执行到 int。

这是一个广泛的话题。我建议您访问oracle

【讨论】:

    【解决方案2】:

    char 原语实际上只是一个数字。 java vm 将任何形式的“x”值转换为其对应的等价数字,以进行任何类型的比较。因此,68 = 'D',因此将其中任何一个放入 switch 语句都会捕捉到这种情况。这就是为什么您可以对字符进行数学运算的原因;字符只是数字。

    【讨论】:

    • 是否反之亦然?
    • 或者它只将 char 转换为 int...即 'D' 为 68...而不是 68 为 'D'
    • 它将转换为此时需要的任何内容。如果你打印出数字 68,它只会打印出数字,因为它不知道你想要一个字符。您应该使用“char”而不是“Character”,您不需要对象版本,它更可预测。
    【解决方案3】:

    基本上,char 是 0 到 65535 范围内的无符号整数(它是 0xffff)

    char:char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。 (来自Here

    假设您的计算机支持 Unicode,它将打印为与该数字对应的 Unicode 字符。

    值 0 到 127 (0x7f) 对应于 Unicode 的原始前体 (ASCII),而 0 到 255 (0xff) 是扩展的 ASCII。

    因此,由于您的程序设置为大小写“68”或“D”,因此无论哪种方式都将被视为相同的内容。

    希望这能回答问题

    【讨论】:

    • 是否反之亦然?
    • 或者它只将 char 转换为 int...即 'D' 为 68...而不是 68 为 'D'
    • 是的,转换是双向的
    • 但是当我使用带有 int 的 switch case 并提供 case 68 时,它只打印 68.. 不是字符 D
    • `for(int cRef='A'; cRef
    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2012-05-01
    • 2013-11-14
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多