随着猎头行业的兴盛,一些应聘者往往可以从猎头那得到一些注意事项和过往经验。比如,在简历中切不可随意用上 "精通" 二字,尤其对于刚入职场的小伙伴。
因为,对于应聘者写上精通和了解没有什么区别,无非是想为自己的简历增色。但是,作为面试官,他们看到 "精通" 二字可是两眼放光,待着满心的期许和兴奋,开始带着 "精通" 的标准来向你提问。往往,最终都是以尴尬的气氛收场。
昨天听了一位资深 Java 工程师的分享,让我意识到自己的火候还不够,基础不够扎实,平时的思考还是少了点。下面分享几个比较基础的点,以点带面,希望可以带来一些思考,也看看你我离精通二字还有多远的距离。
我们平时应该都用过或者见过 parseInt 和 valueOf 这两个方法。一般我们是想把 String 类型的字符数字转成 int 类型。从这个功能层面来说,这两个方法都一样,都可以胜任这个功能。
但是,我们进入源码,看下 Integer 类下这两个方法
parseInt
- public static int parseInt(String var0) throws NumberFormatException {
- return parseInt(var0, 10);
- }
valueOf
- public static Integer valueOf(String var0) throws NumberFormatException {
- return valueOf(parseInt(var0, 10));
- }
从代码,我们起码看到了两点
方法返回的是 int 基本类型,
- parseInt
方法返回的是 Integer 的包装类型
- valueOf
方法实际上是调用了
- valueOf
方法,也就是说,如果我们仅仅只需要得到字符串类型字符数值对应的整数数值,那我们大可不必调用
- parseInt
,因为这样得到整形数值之后还要做一个装箱的操作,将 int 封装为 Integer。
- valueOf
不知道平时忙于编码的你,是否有过压根没有时间管两者区别,而是直接看到谁就用谁的经历。
Java 的八种基本数据类型:int, short, long, double, byte, char, float, boolean
分别有各自对应的包装类型:Integer, Short, Long, Double, Byte, Character, Float, Boolean
拆箱与装箱是相反的操作。装箱是将一个原始数据类型比如 int 赋值给相应封装类的变量比如 Integer。而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。
看一段代码
- int i = 0;
- Integer j = new Integer();
- ...
- i = j;
看完这段代码不知道你是否已经意识到问题所在了。没错,问题出在了
,有人说这没有问题,因为 j 是 Integer 类型,在赋值给 i 的时候会自动拆箱变成 int 类型。但是如果这时候 j 在经过一番处理后得到的是一个 null 值呢,存放在 Integer 下是没有问题的,因为 Integer 就是一个类,允许为 null,但是在拆箱为 null 并赋值给基本类型 i 的时候,这时候就是抛出异常。
- i=j
所以,拆箱装箱带来便捷的时候,也会有一些坑,需要我们去避免,能有效的避免的前提就是我们要基础扎实。
我们是不是太习惯于在拼接一个字符串时使用类似这样的写法
- String result = a + ":" + b + ":" + c;
其实我们看源码就知道,其实每一次 + 的操作都是将要拼接的字符串创建一个 String 类型的对象,然后塞到字符串结果中,最后调用 toString 方法得到最终的字符串。
这样的场景,我们更加推荐使用 StringBuilder,通过调用 append 方法拼接字符串,不需要创建那么多对象浪费系统资源。
我们可以写一段测试代码来看下两种方式的差异
- /**
- * Created by jackie on 17/7/22.
- */
- public class StringAndStringBuilder {
- public static void main(String[] args) {
- testString();
- testStringBuilder();
- }
- public static void testString() {
- long start = System.currentTimeMillis();
- String resultStr = "";
- int i = 0;
- for (int a = 0; a < 10000; a++) {
- resultStr += "abc" + "def" + "g" + i++;
- }
- System.out.println("using String:" + (System.currentTimeMillis() - start));
- }
- public static void testStringBuilder() {
- StringBuilder stringBuilder = new StringBuilder();
- long start = System.currentTimeMillis();
- int i = 0;
- for (int a = 0; a < 10000; a++) {
- stringBuilder.append("abc").append("def").append("g").append(i++);
- }
- System.out.println("using StringBuilder:" + (System.currentTimeMillis() - start));
- }
- }
最终的运行结果如下
- using String: 2266
- using StringBuilder: 3
这种效果显然意见,使用 String 是秒级的 2 秒多,而使用 StringBuilder 是毫秒级的 3 毫秒。
上面的例子只是冰山一角,说出从入门到精通只需要一秒钟,但是要达到精通的级别却需要我们花费很大的功夫。
精通是一种修行,你我都不能松懈和懈怠。
如果您觉得阅读本文对您有帮助,请点一下 "推荐" 按钮,您的 "推荐" 将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注 JackieZheng 的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。
来源: http://www.cnblogs.com/bigdataZJ/p/proficientInJava.html