我正在尝试比较两个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
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的超集)。
基本上你正在做的是将数字 1 转换为字符,所以 ch1
现在等于 unicode 字符 1(SOH 或标头开头)
因此,当你将ch1(SOH)与ch2('1')进行比较时,它将返回false。同样,如果你将ch2(SOH-\u0001)与'1'进行比较,\u0031将返回false
这是返回false的主要原因,您期望的ch1的Unicode值与您分配的值不同
'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常见问题解答: