java日常开发中的一些小问题(持续更新)

finally不会执行的情况

public static void main(String[] args){   
   String ss = null;
	try{
		ss.endsWith("1");  
	}catch  {  
		System.out.println("ss==null");
		ss = "a";
		System.exit(0);
	}finally{  
		System.out.println("finally ss = "+ss);
	}
}

输出结果

ss==null

这种情况下不会打印finally里的内容


StringBuilder和+=的效率问题

	public static void main(String[] args) {
		long time1 = System.currentTimeMillis();
		String s = "";
		for (int i = 0; i < 100000;i++) {
			s+="a";
		}
//		System.out.println(s);
		System.out.println("+= use time "+(System.currentTimeMillis()-time1)+" ms");
		long time2 = System.currentTimeMillis();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			sb.append("a");
		}
//		System.out.println(sb.toString());
		System.out.println("StringBuilder  use time "+(System.currentTimeMillis()-time2)+" ms");
	}

输出结果

+= use time 4147 ms
StringBuilder use time 2 ms

+=相当于不断的new StringBuilder() 对象,然后append,然后toString(),效率很低。


foreach 和 for 的效率问题

public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			sb.append("a");
		}
		String ss = sb.toString();
		sb = new StringBuilder();
		long time2 = System.currentTimeMillis();
		for (char c : ss.toCharArray()) {
			sb.append(c);
		}
		System.out.println("StringBuilder  use time "+(System.currentTimeMillis()-time2)+" ms");
		
		//--------------------------
		sb = new StringBuilder();
		long time3 = System.currentTimeMillis();
		char[] cs = ss.toCharArray();
		for (int i = 0; i < cs.length; i++) {
			sb.append(cs[i]);
		}
		System.out.println("StringBuilder  use time "+(System.currentTimeMillis()-time3)+" ms");
}

输出结果

StringBuilder use time 1 ms
StringBuilder use time 0 ms

当字符串长度小于十万时,下边要快于上边。但是当字符串长度超过十万,上边就快于下边。
所以当元素个数较少时,还是使用for,把元素传化成array再遍历
当元素数量较多,超过十万时,就不要再复制成数组了,因为复制数组的时间超过了遍历的时间。

你可能感兴趣的:(tips)