刷题遇到一个考点是 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

方法一最快,方法三慢。测试代码如下:

    @Testpublic 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

char(数字) 转换 int相关推荐

  1. c语言char数字转int补位,关于char强制转换成int到底是用0还是用1补位的猜想与检验...

    关于char强制转换成int到底是用0还是用1补位的猜想与检验 最近学C语言发现char强制转换时值会完全不同,而且变化很大,于是决定写代码测试一下. 先检验一下char型的-3和3在内存中分别怎么表 ...

  2. java如何将char类型的数字转换成int型的数字

    java如何将char类型的数字转换成int型的数字 public class CharToIntConverter {public static void main(String[] args) { ...

  3. char类型与int类型的转换

    在c语言中,char类型与int类型可以转换,如何转换我在此做一个粗略的总结 首先是char转换为int #include <stdio.h> int main() {char a ;a ...

  4. 【C/C++】数字(int / long / long long)与字符串(string)之间的转换

    [数字] 转换 "字符串"(int -> string) [头文件] #include <string> 注意这个是string,不是cstring 从C++11 ...

  5. c语言 char java转换_c语言中char类型转int类型

    前言 在九度oj做acm的时候,经常会遇到了char类型和int类型相互转化的问题,这里进行一下总结.今后,可能会多次更新博客,因为半年做了很多总结,但是都是保存在word文档上了,现在开始慢慢向CS ...

  6. c语言字符串 数字转换函数大全

    最近学数据结构老是做实验 常用到字符串和数字的转换 想找却发现网上的资料太散 所以搜集整理一下 方便以后再用 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转 ...

  7. c语言一个整数各位数字个数_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  8. C++字符串和数字转换完全攻略

    以字符串形式存储的数字和以数字形式存储的数字之间是有区别的. 例如,字符串 "2679" 就不是一个数字:它是由 2.6.7.9 这 4 个字符的 ASCII 码组成的序列.由于字 ...

  9. 将字符转换成数字(atoi),将数字转换成字符(itoa)

    目录 一.将字符转换为数字. 二.将数字转换成字符. 一.将字符转换为数字. (首先字符必须是"0" -"9",然后转换成十进制的数字) 比如将"12 ...

最新文章

  1. fastd 3.0 开发的那些事
  2. 【Oracle 常用查询】oracle表空间使用率统计查询
  3. 12月10日习题答案大剖析!小伙伴们再接再厉
  4. 生物研究中不得缺少的数字概念
  5. django shortcut函数
  6. 将对象序列化为字符串
  7. MySQL的Grant命令[转]
  8. c# 实现圆形的进度条(ProgressBar)
  9. VS2019正式版注册码秘钥
  10. 如何将本地图片转换成链接
  11. 建立时间保持时间及违例如何处理,求最大时钟频率
  12. 汉信码在iOS客户端中的应用和遇到的坑
  13. 【渝粤教育】电大中专跨境电子商务理论与实务 (12)作业 题库
  14. CTF密码学--新手题--Normal_RSA--解题过程及总结
  15. 算法与数据结构——美团、大众点评笔试题
  16. 堆和栈的区别以及特点
  17. rnqoj-99-配置魔药-dp
  18. 线段,射线,直线的关系
  19. Relation Extraction 关系抽取综述
  20. 百度开放云·10大解决方案

热门文章

  1. 腾讯,百度,金山,可牛,傲游五兄弟结伙的真正原因
  2. MySQL IFNULL() 函数
  3. visual studio 2013编译报错 Unable to start program “.../.../.../project.exe,系统找不到指定文件 error LNK2019
  4. Qtum量子链出席2019年度国盛证券资本市场年会杭州站
  5. 【Elasticsearch】黑马旅游网实践
  6. CDQ分治解二维偏序
  7. html怎么设置背景图 一张图平铺,html怎么设置背景图片全屏平铺?_WEB前端开发...
  8. 【ABC科创企业案例】高科数聚:把脉消费者视角,洞悉消费力趋向
  9. 阿里云IoT启动ID² INSIDE商标授权计划,全生态赋能合作伙伴
  10. html5椭圆搜索框代码,HTML5 椭圆(蛋)运动的小球