问题出在将char型数字转换为int进行计算的问题上。 一看,马上就错了。 很明显,这里的认识很薄弱。 记录搜索结果,以防又忘了打脸。
char定义参考: Java基本数据类型的char。
首先,char和int两种类型可以直接相互旋转。
char ch1='a '; int i=ch1; charch2=(char ) I; 如果对于charin=‘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的方法实现。
方法1 :
利用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方法2 :
使用char包装类Character提供的方法
char ch1='8'; character.getnumericvalue(ch1; //8//character.digit (ch1,10 ); //8方法3 :
通过int包装类Integer。
char ch2='8'; inti=integer.parseint (string.value of ) ch2 ); //8
方法最快,方法慢三分钟。 测试代码如下。
@ testpublicvoidtest ((int circle=100000; StopWatch watch=new StopWatch (; char ch1='8'; watch.start('task1); int count=0; wile (计数周期) {int i=ch1 - '0); }watch.stop (; watch.start('task2); 计数=0; while (count circle (inti=character.digit ) ch1,10 ); }watch.stop (; watch.start('task3); 计数=0; while(countcircle ) inti=integer.parseint (string.value of ) ch1 ); }watch.stop (; 系统. out.println (watch.pretty print (); (结果----------------- ns % taskname---------------- )