一些代码段,求解说

一些代码段,求解说,在参照jfinal写自己的工具类的时候,有一些小问题,求解说!

直接贴代码

jfinal的代码段:

    public static boolean isBlank(String str) {
        if(str == null) {
            return true;
        } else {
            int len = str.length();
            if(len == 0) {
                return true;
            } else {
                int i = 0;

                while(i < len) {
                    switch(str.charAt(i)) {
                    case '\t':
                    case '\n':
                    case '\r':
                    case ' ':
                        ++i;
                        break;
                    default:
                        return false;
                    }
                }

                return true;
            }
        }
    }


我的代码段:

    public static boolean isBlank(String s) {
		return s == null || s.trim().length() == 0;
    }


理由:

    @Test
    public void test2() {
        System.out.println("\n\t\n \n".trim());
        System.out.println("\n\t\n \n".trim().length() == 0);

        System.out.println("\n\t\n \naaa\n\t\n \n".trim());
        System.out.println("\n\t\n \naaa\n\t\n \n".trim().length() == 0);

        System.out.println("\na a\n\t\na \n".trim());
        System.out.println("\na a\n\t\na \n".trim().length() == 0);

        System.out.println("\n\n\t\n \n".trim());
        System.out.println("\n\n\t\n \n".trim().length() == 0);

        System.out.println("" == null);
    }


难道是trim方法的效率太低? 毕竟它是找出空白,然后把空白切掉,有两次循环。。。。。。不过jdk的效率应该还行的吧?!! 求解,是什么原因

评论区

JFinal

2017-02-07 19:47

这段是反编译出来的,建议看一下 jfinal StrKit 原本的代码,此外这段代码已经很清楚在表述含义了,建议进行调试,看一下工作方式

这个改进,主要是为了避免 trim() 方法被调用,此方法有一个 new String(...) 动作,性能肯定不如改进后的好

sruz

2017-02-08 09:00

@JFinal 诶,,波哥英明,,如果说性能的话,,我还真无话可说,,,substring确实耗性能。。。。。。。。。

JFinal

2017-02-08 12:10

@xRhbN StrKit.isBlank 这个方法使用非常频繁,并且在很多热点方法中在使用,所以性能不得不考虑,尤其是要尽可能避免创建对象,String.trim() 最大的缺点就是有可能创建 String 对象

sruz

2017-02-08 20:51

@JFinal 嗯嗯,,但我看了 substring 的源码的时候,,我差不多明白了,,,,,

JFinal

2017-02-08 20:56

@xRhbN 能感受到 jfinal 不断在追求什么了么?

sruz

2017-02-08 21:03

@JFinal 简单 和 性能,,,,简化开发,,,在简化开发的时候,不忘提升性能,,,,,,,,说实话刚开始看到这段代码的时候,,我是蒙蔽的,,因为换行符等的,,明明trim也能过滤掉,,当时没仔细看,,但是也隐隐的感觉到了trim在性能上的问题

热门反馈

扫码入社