登录 注册

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
发布
我是标题
我是文字
我是标题
我是文字
用户名
密码
用户名
密码
重复密码
努力的加载中.....