当一个字符被打印成整数和字符串中的一个字符或单独打印时,我很困惑它是如何工作的?
char j = 'a';
for loop
{
String arr[i] = Character.toString(j);
j++;
}
print arr[i];
这印的是de
为什么在这段代码中允许使用j++呢?当我试图打印j+1时,它给出了从int到string的有损转换错误?
char a = 65, b = 97;
String str = a+b+"hi";
print(str);
这是162 hi;
为什么不打印ascii(162)嗨?
3条答案
按热度按时间vsdwdz231#
而
+
适用于串接,不适用于字符。所以当你这么做的时候a + b
哪里a
以及b
是字符,java将这些字符转换为整数并执行整数加法。下一个附录hi
到得到的整数结果。如果需要,可以先输入一个空字符串,告诉java您需要的是串联,而不是加法:
这张照片:
啊嗨
有许多其他方法可以获得相同的输出。我最喜欢的是
format()
:System.out.format("%chi%n", a + b);
cqoc49vn2#
char
是个误称,真的。char
作为java中的数据类型,它表示一个无符号的16位整数值。如中所示,它从0开始,高达65535,如果再加上1,它将再次循环回到0。java本身大多只支持
int
以及long
-你确实有byte
,short
以及char
但它们希望尽快向上转换为整数。记住这两件事:
像byte和short一样,char是低级的,并且容易丢失,因为几乎对char/byte/short所做的任何数学运算都倾向于向上转换为int
char是数字类型。这与性格无关。
这个规则有一个例外:char是数字类型,与字符无关,但我们都知道char应该表示字符。因此,jvm中的方法将相应地起作用。
因此,呼叫
System.out.println((char) 65);
,调用char
println的变体,printsA
,因为println的char变量的实现将接受传递给它的整数值,并查找低平面unicode表中提供的数字并打印在那里找到的字符。没有什么内在的char
(数据类型),这纯粹是java.lang.system源代码的一个方面。因此:
char a = 5; a++;
是合法的,因为char是数字类型。String str = a + b + "hi";
印刷品165hi
因为java计算+
操作员向左向右,所以这是对:因此,我们得到,什么是:
正如我所说,chars倾向于尽快向上转换为int,这在这里发生:a+b是一个int表达式,因此println的int变量被调用。
在
a + b + "hi"
同样的规则也适用于:(a + b)
是一个值为162的int表达式,因此可以归结为162 + "hi"
,这是字符串串联,使字符串“162hi”。基本上,什么时候
char
在java中表现得像一个整数?它在java中的行为总是像一个整数。除非将char表达式传递给方法,否则这会调用方法的版本,该版本将传入的数字视为在unicode表中查找的对象。bqucvtff3#
简而言之,java中的“”操作符不会加宽。结果的数据类型与操作数的数据类型相同,在本例中为char。
但是“+”运算符可以加宽,也就是说,产生一个范围更大的结果类型。向一个字符(甚至另一个字符)添加任何内容都会将结果扩大到整数,因为编译器知道结果可能会溢出。加宽后,结果不能分配给char——它可能太大了。
当然,char上的运算符也可能溢出。尽管如此,java平台规范(本质上)说,++是非扩展的。