的方式。之前写过一篇文章《老师,你确定Java注释不会被执行吗》。文章因此在知乎火了一把,阅读量接近10万人。一些自命不凡的同行批评称呼夸大;同时也有很多初学者表示自己的知识量增加了,以前不知道这个知识点,现在学会了。必须承认,我写的大部分技术文章都是针对初学者的,因为我觉得他们最需要帮助,这也是我坚持分享的初衷。我也不喜欢写那些高深的文章,费时费力,受众少。就拿我们学过的古诗词来说吧,“鹅,鹅,向天高歌”,“一走二三里,延村四五间房”,我觉得很好。不用搞阳春白雪,落得高人一等吧?那么这次分享一个新的知识点。我敢打赌,很多同学可能不知道一包威龙辣条(要钱)。在Java中,String(字符串)和int(整数)是两种不同的数据类型。弦可以组合很多弦,整形就是整形。(同学们可能会疑惑,我不知道这个知识点,别忽悠我好吗?继续往下看,吃大餐之前,能不能吃点零食或者凉菜?)有时候,字符串可以简单的包含一些数字,说“123”。大家应该都看到了,有些操作需要输入手机验证码的时候,要求输入的大多是6位或者4位的随机数。它们在传递给服务器时,初始形式是字符串类型,然后可能会转化为整形进行一些处理。对于Java,“+”运算符不能直接将两个字符串类型的数字相加,见下面的例子。Stringa="100";Stringb="50";Stringc=a+b;System.out.println(c);程序输出的结果是10050,而不是150。对于字符串,“+”运算符用于连接,而不是加法。(同学们可能又要催促了,这个知识点我也知道!马上,关键点马上就来了。)然后就是需要把字符串转成整数再做计算。常用的方法有两种:一、使用Integer.valueOf(),它会返回一个wrapper类型的Integer,当然也可以自动拆箱转换成int类型。Stringa="100";Stringb="50";intA=Integer.valueOf(a);intB=Integer.valueOf(b);intc=A+B;System.out.println(c);程序的输出如下显示:150其次,使用Integer.parseInt(),它会返回一个基本数据类型int。Stringa="100";Stringb="50";intA=Integer.parseInt(a);intB=Integer.parseInt(b);intc=A+B;System.out.println(c);程序的输出如下Show:150这两种方式,先推荐第二种,因为不涉及自动拆包,性能更好。(同学们可能不耐烦了,就这样?好了,现在重点真的来了)那么除了以上两种方法,同学们还能想出第三种方法吗?将字符串转换为整数。你是不是突然觉得脑袋有点空虚?空就是对,这篇文章最有见地的时候,它来了!来得惊人!/***@author沉默王二,一个有趣的程序员*/publicclassString2IntDemo{publicstaticvoidmain(String[]args){Stringa="100";Stringb="50";intA=string2int(a);intB=string2int(b);intc=A+B;System.out.println(c);}publicstaticintstring2int(Strings){intnum=0;intpos=1;for(inti=s.length()-1;i>=0;i--){num+=(s.charAt(i)-'0')*pos;pos*=10;}returnnum;}}这个程序的输出也是150,眼尖的同学可能发现了什么string2int()方法是什么神奇的方法,而且还有把字符串转整数的效果?首先要普及一点常识,同学们需要对ASCII码有一点了解,即所有的字符都有一个代码来识别它们——这个代码就是ASCII码。基于此,所有数字字符减去字符'0'将得到该字符的绝对值,即整数。Strings="520";System.out.println(s.charAt(2)-'0');System.out.println(s.charAt(1)-'0');System.out.println(s.charAt(0)-'0');输出结果如下:025字符串“520”的长度为3,即下标为2的位置为字符'0'-数字520的个位;下标为1是字符'2'-数字520的十位;下标为0的位置就是字符'5'——数字520的百位。聪明的同学可能想到了,通过一个for循环,遍历字符串,然后计算当前位置的整数值,个位乘以1,十位乘以10,百位乘以100,再相加,就是字符串对应的整数值。没错没错,string2int()方法就是干这个的。若参数为字符串“520”,则返回结果为整数520;若参数为字符串“100”,则返回结果为整数100;如果参数是字符串“50”,那么返回的结果是整数50。如果你是一个有抱负的程序员,你不会对Integer.valueOf()和Integer.parseInt()都太满意,因为它只是用别人的轮子。而自定义方法string2int()自始至终都属于造轮子。想到这里,是不是觉得自己开始牛逼了呢?其实只要你愿意拉源码,就会恍然大悟。先看Integer.valueOf()方法:publicstaticIntegervalueOf(Strings)throwsNumberFormatException{returnInteger.valueOf(parseInt(s,10));}内部调用其实就是intparseInt(Strings,intradix)方法。再看Integer.parseInt()方法:publicstaticintparseInt(Strings)throwsNumberFormatException{returnparseInt(s,10);}内部调用也是intparseInt(Strings,intradix)方法,baseradix参数都是10——学生?你猜怎么了?是的,你的猜测几乎是分不开的。我们看一下intparseInt(Strings,intradix)方法的源码:publicstaticintparseInt(Strings,intradix)throwsNumberFormatException{/**WARNING:ThismethodmaybeinvokedearlyduringVMinitialization*beforeIntegerCacheisinitialodthevalueOfonot.*/if(s==null){thrownewNumberFormatException("null");}if(radix
