java中new string与直接赋值的比较
今天先是看到了这样子的一个程序,比较new string与直接赋值的性能。修改后如下:
package performance; public class StringComparePerformance{ public static void main(String[] args){ int timer=1000000000; long startTime = System.nanoTime(); for(int i=0;i<timer;i++){ String s1 = "hello"; String s2 = "hello"; } long endTime = System.nanoTime(); System.out.println("通过 String 关键词创建字符串:"+ (endTime - startTime) + " 纳秒" ); long startTime1 = System.nanoTime(); for(int i=0;i<timer;i++){ String s3 = new String("hello"); String s4 = new String("hello"); } long endTime1 = System.nanoTime(); System.out.println("通过 String 对象创建字符串: " + (endTime1 - startTime1) + " 纳秒"); } }
运行结果:
通过 String 关键词创建字符串:2953277 纳秒
通过 String 对象创建字符串: 51331270 纳秒
可以看到new string方法的效率严重低于直接赋值
于是在网上查找了资料,并且找到了这段程序:
package stringtest; public class stringtest{ private static String aString = "abc"; public static void main(String[] args) { String aString = "abc"; String bString = new String("abc"); String cString = "abc"; String dString= new String("abc"); T test=new T(); System.out.println(aString == test.bString); System.out.println(aString == T.aString); System.out.println(aString == stringtest.aString); System.out.println(aString == cString); System.out.println(aString == bString); System.out.println(aString.equals(bString)); System.out.println(bString==dString); System.out.println(bString.equals(dString)); } } class T { static String aString = "abc"; String bString = new String("abc"); }
运行结果:
false
true
true
true
false
true
false
true
可以看出,new string创建的对象与其他对象进行==时均返回false,即使文本内容一样(equals返回true)
原因在于,new string创建对象时会分配新的内存地址给新创建的对象,而直接赋值则会沿用老的内存地址。因此new string创建的对象总是不会和其他对象拥有同样的内存地址。
2018
04 11
上一篇
Older
下一篇
Newer
评论
0
点击
2364