【Bug】Java中Char和Int的互转

今天在做一个栈相关的算法,然后在 Java中Char和Int互转 这里粗心记混了,结果出了个Bug,修了一会。

事情是这样的:

有一个由数字构成的字符串,比如:“1433223”,然后想把组成字符串的每一位数字都放到一个栈里面去。

但是每次从这个字符串(String)拿出来的是是一个字符(Char)而非数字(Int),比如拿出第一位,他是字符‘1’而不是整数1。

当时就直接强转了,以为: int 1 = (int)‘1’

但其实 (int)‘1’ = 49(int) 而不是期望的 1(int)。导致后面的一大堆出了奇怪的 bug。

image-20230111231905800

因为 Java 中的char其实底层都是对应的ASCII码,也是int整数。

比如:‘1’(Char) = 49(int)

所以正确的做法,应该是下面这样:

把char转为对应的Integer

image-20230111232012386

当然也可以这样:

numStack.push((int)(char01 - ‘0’);

所以关于 Java的Char底层就是对应的ASCII码(int),你忘了吗?

(int)‘1’ = 1(int)

(int)‘1’ = 49(int)