char转换为数字_char字符转int

char转换为数字_char字符转int刷题遇到一个考点是char型数字转int进行计算的问题。一看就会,一做就错,显然是在这里的认识薄弱了。将一番搜索的结果记录下来,以备再忘来打脸。char的定义参考:Java基本数据类型之char。首先,char跟int这两种类型可以直接互转:charch1=’a’;inti=ch1;charch2=(char)i;那么面对charin=‘2’需要转成int做计算,那么很…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188774.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 斐波那契数列python实现

    斐波那契数列python实现方法一deffbnc(n):ifnotisinstance(n,int):raiseValueError('nmustbeint')ifn==1:retu

    2022年7月6日
    20
  • 关于 jQuery delegate , undelegate

    关于 jQuery delegate , undelegate没啥好说的,看代码吧!jQuery版本:1.71浏览器版本:chrome211<body>23<ulclass=”a-list”>4<li><ahref=”javascript:;”>test1</a></li>5&…

    2022年10月7日
    2
  • pychrm激活码【注册码】

    pychrm激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    52
  • SpringApplication_一个阶段结束

    SpringApplication_一个阶段结束1、SpringApplication正常结束SpringBoot2.0为SpringApplication正常结束新引入了SpringApplicationRunListener的生命周期,即running(ConfigurableApplicationContext),该方法在Spring应用上下文中已准备,并且CommandLineRunner和ApplicationRunnerBean均已执行完毕。EventPublishingRunListener作为SpringApplicationRu

    2022年9月8日
    3
  • python新手程序_怎么用微信小程序练字

    python新手程序_怎么用微信小程序练字100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去      掉不满足条件的排列。2.程序源代码:fori…

    2022年10月14日
    2
  • mongodb联表查询_mongodb聚合查询

    mongodb联表查询_mongodb聚合查询  在使用MongoDB存储数据的时候,我们查询的时候,有时候难免会需要进行连表查询。但是MongoDB本身是非关系性数据库,连表查询,很多时候,需要我们自己在代码里手工操作。但是从MongoDB3.2版本过后,我们可以使用lookup∗∗∗进行连表查询。下面就简单介绍一下MongoDB的∗∗∗lookup∗∗∗进行连表查询。下面就简单介绍一下MongoDB的∗∗∗lookup***进行…

    2022年9月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号