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

为什么 ch1 == ch2 是假的,它不是拥有相同的字符值吗?

徐阳炎
2023-03-14

我正在尝试比较两个char原语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

共有3个答案

邢起运
2023-03-14

char类型自Java2以来基本上已损坏,物理上无法表示大多数字符。

而是使用代码点整数。每个字符都被永久分配了一个特定的数字,一个代码点。

int codePoint = "1".codePointAt( 0 ) ;  // Annoying zero-based index counting. 

结果是49十进制,31十六进制。

为每个代码点创建一个包含该单个字符的字符串。

String s = Character.toString( codePoint ) ;

或者更具体地说:

String latinDigitOneCharacter = Character.toString( 49 ) ;

正如其他人指出的那样,您的代码错误地将定义为拉丁数字“1”的字符与代码点1进行了比较。

分配给一个代码点的字符是控制代码SOH,标题的开始。这在Unicode和US-ASCII中都是如此(Unicode是US-ASCII的超集)。

轩辕晔
2023-03-14

基本上你正在做的是将数字 1 转换为字符,所以 ch1 现在等于 unicode 字符 1(SOH 或标头开头)

因此,当你将ch1(SOH)与ch2('1')进行比较时,它将返回false。同样,如果你将ch2(SOH-\u0001)与'1'进行比较,\u0031将返回false

这是返回false的主要原因,您期望的ch1的Unicode值与您分配的值不同

敖毅
2023-03-14

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

< code>(char)1的值为1。

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

cast (char)不会更改其右侧表达式的值,只是会将其从完整大小的整数截断为16位(对于0到65535的值没有变化)。

 类似资料:
  • 我刚刚了解到python中有truthy和falsy值,它们不同于正常的和。 有人能深入解释什么是真实和虚假的价值观吗?我应该在哪里使用它们?truthy和值与falsy和值之间有什么区别?

  • 问题内容: 我刚刚才知道有和值在这是从正常的不同和? 有人可以深入解释什么是真实和虚假的价值观吗? 我应该在哪里使用它们? 是什么区别和值和和价值观? 问题答案: 如评论所述,它仅指评估为True或False的值。 例如,查看列表是否不为空,而不是像这样检查: 您可以简单地做到这一点: 这是因为在评估布尔值时,某些值(例如空列表)被视为False。非空列表为True。 类似地,对于整数,对于,空字

  • 我刚刚开始使用MongoDB,我注意到它使用BSON在内部存储数据。然而,关于什么是BSON以及如何在MongoDB中使用BSON,文档并不十分清楚。有人能给我解释一下吗?

  • 我对代表什么感到困惑。根据它的留档,所有整数类型都是0。的浮点类型公式看起来类似于的的。

  • 问题内容: 以下面的代码为例: 示例1:我猜他们是同一对象。每次引用时,Python都会复制该方法吗? 示例2:预期。 示例3:预期,因为它们是不同的对象。 示例4:为什么此输出与示例2不匹配? 问题答案: 范例1: 是一种 未绑定的方法 。这些在当今的Python中甚至都不存在,因此请认为这是无用的历史课程。 每次引用时,Python都会复制该方法吗? 是的,或多或少。这是通过描述符协议完成的。

  • 问题内容: 我们知道根目录是/,根据posix,还有另一个目录//与/不同。当使用ls /和ls //时,输出与stat相同,但是,如果cd /和cd //则输出不同,尽管目录内容相同。那真的让我感到困惑。有人得到答案了吗? 问题答案: 从Bash常见问题解答: