public class CharTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入字母:");
char c = in.next().charAt(0);
if (c >= 'A' && c <= 'Z') {
c += 32;
System.out.println("这里的大写" + (char) (c - 32) + "被转换成了" + c);
System.out.println("这里的大写" + (c - 32) + "被转换成了" + c);
} else if (c >= 'a' && c <= 'z') {
c -= 32;
System.out.println("这里的小写" + (char) (c + 32) + "被转换成了" + c);
System.out.println("这里的小写" + (c + 32) + "被转换成了" + c);
}
/*
* 首先,我加了两句,输出,楼主先运行看一下。然后我再解释。
* 这里涉及到三个知识第
* 1.字母有其对应的A码,
* 2.大小写相差32
* 3.自动数据类型转化。
*
* 上面例子如果不好理解的话,我们换一个,好理解的
* int a=2;
* double b=2.2;
* a+b最后的结果会是什么类型呢???????
* 显示会是double,为什么这样呢?我们说数据的处理,肯定要在同一个类型的时候才能处理,
* 所有不同数据类型处理时要通过自动或者强制转化,否则会报错。
* 这里是自动转化,自动转化有两个要求:
* 1.两种数据类型兼容
* 2.小的向大的转化。
* 所以这里int 转为double,最终结果是double
*
*
* 好了,现在来分析一下
* (char)(c-32)和(c-32)的区别
* 其实也就是c-32。
* 1.这里的首先char 和int 通过A码可以转换,所以兼容
* 2.int 比char 大。
* 所以计算的时候c先转为相应的A码,也就是整数,然后进行计算。计算后的结果必然是整数
* 如果你此时想得到char。就必须通过强制类型转化。所以要(char)
* */
}
}
总结一下: 通过转化后,因为参与 了+或者-32,所以最终的结果是以整数的形式出现的。
当然,如果你这样写的话,就另当别论了
再举例说明清楚
如果是这样的话
c+=32;
System.out.print(c);
输出的是字母
对比
System.out.pirnlnt(c+32);
输出的是数字??
为什么呢
因为c=c+32,c本身的数据类型是char 后面的结果计算后的时候会自动根据对应的A码转为对应的char
所以需要区别的是:
如果是赋值运算。运算后的右边的结果,会自动转型为左边的类型,如果不能转型会报异常。
如果是通过其他运算(比如四则运算),它会先把所有数据类型先转化为较大的数据类型,最终得到的结果也是较大的数据类型。
最后举例
int a=32;
char b='A';
char c='A';
b+=32;//赋值运算
//或者b='A'+32;
//如果是b=b+32;就会报错。因为后面进行了加法运算,结果需要用int来接收
//int d=b+32;这个就对了
System.out.println(b); //a
System.out.println(c+32);//97,其他运算