String类型的判空

 String类型是使用比较多的引用类型:

1、java5之前对null 的判断是 null == Object ,java7引入了java.util.Objects类,java8在工具类中增加了isNull()方法。个人感觉仅仅提高了代码简洁性。

2、对String类型是 "" 的判断,我认为只能根据具体的业务进行分析;不考虑业务的情况下,性能最好的是 String str = ""; 0 == str.length() 的; 其余可以参考以下的代码块。

 3、String类型在 栈、堆、常量池的情况

String str1 = "";  // = 前面是栈  = 后面是常量池

String str2 = new String(); // = 前面是栈 = 后面是堆

Stirng str3 = new String(""); // = 前面是栈 = 后面是堆,使用这种方式,编译工具提示下图

本意就是,浪费不必要的内存。

public static void main (String [] args){
        String str = "          ";
        long startTime = System.currentTimeMillis();
        for(long i=0;i<10000000000L;i++){   /// 1000000000
//            if(null == str || "".equals(str)){ // 2451
//            if(null == str || 0 == str.length()){ //2428
            if(null == str || 0 == str.trim().length()){// 37846  Objects.isNull(str)
//            if(null == str || str.isEmpty()){ // 2437
//            if(null == str || "" == str){//2389   不合法的比较 貌似无意义 比如给变量赋值
//                do something
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用方法花费的时间:"+(endTime-startTime));
        

        String str1 = "";
        String str2 = new String();
        String str3 = new String("");
        System.out.println(str1 == str2);//   false
        System.out.println(str1 == str3);//   false
        System.out.println(str2 == str3);//   false
        System.out.println(str1.equals(str2));//   true
        System.out.println(str1.equals(str3));//   true
        System.out.println(str3.equals(str2));//   true
    }

部分内容参考了:java.util.Objects.isNull vs object == null 之Objects类的介绍_russle的专栏-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值