代码之家  ›  专栏  ›  技术社区  ›  Siva

为什么ch1==ch2为false,它不具有相同的字符值吗?

  •  0
  • Siva  · 技术社区  · 3 年前

    我试图比较两个字符原语ch1和ch2。这两个都被指定为值1,如下所示。

    但当使用“==”操作符进行比较时,它返回false,我不明白幕后发生了什么。

    char ch1 = (char)1;
    char ch2 = '1';
    System.out.println(ch1==ch2); //false
    
    //further comparisions
    System.out.println(ch1 == 1);       //true
    System.out.println(ch1 == '\u0031'); //false
    
    System.out.println(ch2 == 1);       //false
    System.out.println(ch2 == '\u0031'); //true
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   passer-by    3 年前

    '1' 值为49(十六进制31)。

    (char)1 值为1。

    A. char 它只是一个16位整数。符号 'x' 表示“字符x的字符代码”,其中Java中使用的编码是Unicode,特别是UTF-16。

    演员阵容 (char) 不会将表达式的值向右更改,除非它将其从全尺寸整数截断为16位(值0到65535不变)。

        2
  •  0
  •   David Valladares L.    3 年前

    基本上你要做的就是把第一个数字转换成一个字符,所以 ch1 现在等于unicode字符1(SOH或头的开头)

    所以当你比较ch1(SOH)和ch2('1')时,它会返回false 同样,如果将ch1(SOH-\u0001)与“1”进行比较,则\u0031将返回false

    这就是返回false的主要原因,您期望的ch1的unicode值与您指定的值不同