class Demo
{
public static void main(String[] args)
{
char m = 97;
System.out.println("m="+m);
}
}
这行代码输出结果是a,是因为变量m中一开始存储的就是a;还是因为m中一开始存的是97,打印输出语句时,查ASCII表将97转化成a?
m 定义的char类型,根据ascii表中97对应的字母为a,m输出后打印的结果是:a
char m = 97;
System.out.println("m="+m);
其实m里面存的是二进制的97 具体是什么就看你想把它当做什么类型进行输出了 如果是整数就是97 如果是字符就会去找ascii表对应的值就是a了
char m = 97;
相当于
int i = 97;
char m = (char)i;
也就是把97转换成字符,97是a的ascii。
你可以说m存的是97,也可以说m存的是a,这是一回事。计算机内部,字符串其实也是以数字的形式(二进制)表示的,查ascii表是人做的事情。机器不需要。
97在ascii表示字符a,如果把97赋给一个字符型变量,在打印时,系统会使用字符类型打印结果,而不是int。硬件中是使用二进制编码的格式存储数据,
97在机器以二进制码——1100001保存。如果是字符型就会输出a,int就是97了。
分配给m的内存中存的是97的二进制数据1100001,然后你定义m是char型,所以输入的是ascii表中为97的字符‘a’了
java计算时,char ,byte,short这三个基本数据类型会自动转成int型数据计算,计算完成后再转回原来的数据类型。
char m = 97;
System.out.println("m="+m);
相当于:
在jvm里读取时相当于;
int m = 97;
System.out.println("m="+(char)m);
而97在ASCII表中标示字符'a',所以输出的结果是‘a’.
java是解释型语言,需要通过jvm去读取字节码,而字节码层面支持的整形数据只有int long型,这就是为什么这三种基本数据类型要先转为int型再计算的原因。
m寄存器一开始存储的是97。你定义char型,输出的97指令就打印出a字符。