java中char类型大小写转换问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中char类型大小写转换问题相关的知识,希望对你有一定的参考价值。
publicclass
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,其他运算 参考技术A 你可以使用character.touppercase(char)方法来使小写转换为大写character.tolittlecase(char)方法来把大写转换为小写
返回字符型
我也不能确定了是不是字符了,你用character.isdefined()方法检查一下吧,它的返回值是布尔型
Java中数据类型转换问题
boolean类型不可以转换为替他的数据类型。
Java中byte(8位)、short(16位)、char三种类型的优先级是相同的,相同优先级之间是不能进行自动转换的(如果相互转换的话,必须强制类型转换),只能将低类型自动转换为高类型,例如,可以将byte自动转换为int类型。(char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。 再将char类型的数据赋给高优先级类型时,这时会自动类型转换,并且将该char的unicode编码赋给高优先级类型的变量)
整型,字符型,浮点型的数据在混合运算中相互转换,转化时遵循以下原则:
容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:
1、byte,short,char-->int(32位)-->long(64位)-->float(32位)-->double(64位)
byte,short,char之间不会互相转换,他们三者和其他数据类型混合计算时首先会转换为int类型
2、容量大得数据类型转换为容量小得数据类型时,要加上强制转换符,但可能造成精度降低或溢出;
3、有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的哪一种数据类型,然后再进行计算。
4、实数常量(如:1.2)默认为double。
5、整数常量(如:123)默认为int。
#####值得注意的是:
数值间的相等比较,本质是比较他们二进制存储是否相等。例如:0.3f==0.3返回的是false(32位的2进制的0.3表示和64位的0.3表示是不同的);但是0.5f==0.5返回的是true(因为32位和64位的二进制表示是相同的)
以上是关于java中char类型大小写转换问题的主要内容,如果未能解决你的问题,请参考以下文章