java中String的==和equals的区别
首先看代码1:
public static void main(String[] args) { List<String> list=new ArrayList<String>(); for(int i=0;i<99999999;i++){ String a="ssss"; list.add(a); } long t1=System.currentTimeMillis(); for(int i=0;i<99999999;i++){ //if(list.get(i).equals("ssss")); if(list.get(i)=="ssss"); } long t2=System.currentTimeMillis(); System.err.println("运行时间:"+(t2-t1)); }
运行时间:43
代码2:
public static void main(String[] args) { List<String> list=new ArrayList<String>(); for(int i=0;i<99999999;i++){ String a="ssss"; list.add(a); } long t1=System.currentTimeMillis(); for(int i=0;i<99999999;i++){ if(list.get(i).equals("ssss")); //if(list.get(i)=="ssss"); } long t2=System.currentTimeMillis(); System.err.println("运行时间:"+(t2-t1)); }
运行时间:66
区别:
1.==对比的是常量池中的地址
2.equals对比的是常量池中值,有个拿到地址去常量池中取值的过程,最后在进行值的对比,所以效率低点
源码如下:
String中对equals进行了重写,如果是Object,比较地址。