在java中,字符什么时候表现得像字符和整数?

sh7euo9m  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(283)

当一个字符被打印成整数和字符串中的一个字符或单独打印时,我很困惑它是如何工作的?

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)嗨?

vsdwdz23

vsdwdz231#

+ 适用于串接,不适用于字符。所以当你这么做的时候 a + b 哪里 a 以及 b 是字符,java将这些字符转换为整数并执行整数加法。下一个附录 hi 到得到的整数结果。
如果需要,可以先输入一个空字符串,告诉java您需要的是串联,而不是加法:

char a = 65;
    char b = 97;
    String str = "" + a + b + "hi";
    System.out.println(str);

这张照片:
啊嗨
有许多其他方法可以获得相同的输出。我最喜欢的是 format() :

System.out.format("%c%chi%n", a, b);
``` `%c` 格式字符串告诉java打印一个字符。不管传递的参数是字符还是整数,它都会这样做。这又意味着以下工作:

System.out.format("%chi%n", a + b);

¢你好
这里是 `a + b` 是一个 `int` ,但是 `%c` 使其转换回 `char` ,在这种情况下 `¢` .

### 日本++

关于 `j++` 哪里 `j` 是一个特殊而混乱的字符。它基本上执行与 `j + 1` 但是将结果转换回char(编译器优化可能会导致它不以这种方式实现,但结果保证与以前一样)。所以你可以说你得到的结果和 `j = (char) (j + 1);` .

### 总则

你不能用汉字做数学。无论何时对字符应用算术运算,java都会首先将其转换为整数。这很顺利,因为 `int` 可以保存 `char` . 对于相反的转换,情况并非如此。因此java通常拒绝从 `int` 至 `char` 就其本身而言,您需要明确地告诉它这样做,因此在数据丢失的情况下,您也要承担正确转换的责任。这个 `++` 转换回 `char` 是含蓄的。
cqoc49vn

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的变体,prints A ,因为println的char变量的实现将接受传递给它的整数值,并查找低平面unicode表中提供的数字并打印在那里找到的字符。没有什么内在的 char (数据类型),这纯粹是java.lang.system源代码的一个方面。
因此: char a = 5; a++; 是合法的,因为char是数字类型。 String str = a + b + "hi"; 印刷品 165hi 因为java计算 + 操作员向左向右,所以这是对:

String str = (a + b) + "hi";

因此,我们得到,什么是:

char a = 65, b = 97;
System.out.println(a + b);

正如我所说,chars倾向于尽快向上转换为int,这在这里发生:a+b是一个int表达式,因此println的int变量被调用。
a + b + "hi" 同样的规则也适用于: (a + b) 是一个值为162的int表达式,因此可以归结为 162 + "hi" ,这是字符串串联,使字符串“162hi”。
基本上,什么时候 char 在java中表现得像一个整数?它在java中的行为总是像一个整数。除非将char表达式传递给方法,否则这会调用方法的版本,该版本将传入的数字视为在unicode表中查找的对象。

bqucvtff

bqucvtff3#

简而言之,java中的“”操作符不会加宽。结果的数据类型与操作数的数据类型相同,在本例中为char。
但是“+”运算符可以加宽,也就是说,产生一个范围更大的结果类型。向一个字符(甚至另一个字符)添加任何内容都会将结果扩大到整数,因为编译器知道结果可能会溢出。加宽后,结果不能分配给char——它可能太大了。
当然,char上的
运算符也可能溢出。尽管如此,java平台规范(本质上)说,++是非扩展的。

相关问题