大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
刷题遇到一个考点是 char型数字 转 int 进行计算的问题。一看就会,一做就错,显然是在这里的认识薄弱了。将一番搜索的结果记录下来,以备再忘来打脸。
char的定义参考:Java基本数据类型之char。
首先,char 跟 int 这两种类型可以直接互转:
char ch1 = 'a';
int i = ch1;
char ch2 = (char)i;
那么面对 char in = ‘2’ 需要转成 int 做计算,那么很自然想到把char 型变量直接赋给 int 型就能计算 了。
char in = '2';
int iVar = in;
System.out.println(in);
System.out.println(iVar);
//输出:
// 2
// 50
想当然的做法果然错了:期望取出来的 int 2,实际却是 int 50。
当 char 直接 赋给 int 时,实际上是把 char 变量的ASCII 码赋给 int类型,因此取出char 变量的数值不能通过直接转换成int的方法实现。
方法一:
利用char变量使用 ASCII进行算术运算这一特征,可以得到一种间接计算获取数值的方法。
char ch1 = '8';
int iVar = ch1 - '0';
System.out.println(iVar);
//输出
// 8
‘0’-‘9’ ASCII 为 48-57,且顺序一致,因而char数字之间的差值等于数字之间的差值 。
System.out.println('9'-'1' == 9-1); //true
System.out.println('8'-'0' == 8); //true
方法二:
使用 char 包装类Character提供的方法;
char ch1 = '8';
Character.getNumericValue(ch1); // 8
//Character.digit(ch1,10); // 8
方法三:
通过int 包装类 Integer 。
char ch2 = '8';
int i = Integer.parseInt(String.valueOf(ch2)); // 8
方法一最快,方法三慢。测试代码如下:
@Test
public void test(){
int circle = 100000;
StopWatch watch = new StopWatch();
char ch1 = '8';
watch.start("task1");
int count = 0;
while (count++ < circle){
int i = ch1 - '0';
}
watch.stop();
watch.start("task2");
count = 0;
while (count++ < circle){
int i = Character.digit(ch1,10);
}
watch.stop();
watch.start("task3");
count = 0;
while (count++ < circle){
int i = Integer.parseInt(String.valueOf(ch1));
}
watch.stop();
System.out.println(watch.prettyPrint());
}
结果:
---------------------------------------------
ns % Task name
---------------------------------------------
002761400 010% task1
003343100 012% task2
022454000 079% task3
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188774.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...