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博客