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
点击
2789