众所周知,Spring最为最流行的框架,其源码写得非常棒!!!
Spring注入一个类的时候,BeanFactory 收到的一个类名, 类名都是首字母大写的,但是注入使用的确是首字母小写,这就引发了思考,spring是怎么把首字母大写转小写的呢?
办法有很多,比如截取字符串改了放回去之类的;这里介绍一个最高效的方法。 用的是字符编码相关的知识点。
先上代码:
package cn.com.ddh;
public class TestAscii {
public static void main(String[] args) {
String s = "Abc";
char[] c = s.toCharArray();
c[0] = (char) (c[0]+(32)); //ASCII
c.toString();
System.out.println(c);
}
}
输入结果:abc
首先我们把字符串"Abc" 转成字符数组,然后C[0] 肯定就是首字母了,C[0]是A,A在ASCII码中是第65位,而在ASCII码中 大写字母和小写字母差了32个位置;
所以为了得到小写字母a ,我们可以将A+32 ,32是int类型 需要将结果强转,就能得到想要的小写字母 a了;
顺便再介绍一下,为什么可以按ASCII码的规矩就能讲大写字母转小写了:
首先我们写的 .Java 文件会被JVM编译成 .class文件 .Java文件 被JVM 转为.class文件后, 代码里的字符和字符串都是按unicode格式存在的
而unicode码的的前128位和 ASCII码的128位是一样的;所以我们可以直接使用
c[0] = (char) (c[0]+(32));
这样的方式来处理!好的 简单的部分到这里就结束了,下面的啰嗦是普及一下编码知识:
nicode 和 ASCII 的故事就多了 这里就不做延伸了,稍微简单的说下:
美国人用的是英文,他们发明了ASCII码 只用128位(0是第一位)就足够表示字母了,就够他们使用了,当时的美帝可能都没有想到除了他们还有其他人能够使用计算机就压根没替我们中国人,亚洲人着想。 后来不同国家的人把128-255位用来处理自己国家的语言;
但是美帝没良心,但是美帝的程序员有良心啊,他们后来为全世界的人们发明了unicode码,