String对象的几个理解

来源:互联网 发布:老干部网络意思是贬义 编辑:程序博客网 时间:2024/06/06 05:18

转载地址:http://my-mis.blog.sohu.com/14592137.html

一、关于String对象
关于String对象,bbs上争论不休。
现在倾向的解释是:String s = “abc”;这个语句中s是一个引用,它指向对象”abc”。这样一来,下面的语句:
String s1 = “abc”;
String s2 = “abc”;只产生了一个对象,即:”abc”。
而String s = new String(“abc”);这个语句中s是一个对象。下面的语句:
String s1 = new String(“abc”);
String s2 = new String(“abc”);就产生了两个对象,它们是s1和s2。
有了上面的解释,我们就不难理解,为什么我们优先在代码中使用前一种表达方式,因为前一种方式是引用,不论你在代码中要使用多少个相同的引用,只产生一个对象。而后一种方式则即使多个对象的内容一样,它们也是不同的对象,有各自的内存开销;这就大大的增加了我们内存的开销。
同样,下面的代码以及它们的运行结果也就能解释了。
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
代码:System.out.println(s1==s2);
运行结果:true
代码:System.out.println(s1=="abc");
运行结果:true
代码:System.out.println(s1.equals(s2));
运行结果:true
代码:System.out.println(s1==s3);
运行结果:false
代码:System.out.println(s3.equals("abc"));
运行结果:true


二、String与StringBuffer的区别
既然语句:String s = “abc”;中的s是一个引用。那么,在下面的语句:
String s = “abc”;
s = s+”d”;中,就应该有三个对象:”abc”、”d”和”abcd”。引用s先是指向对象”abc”,后指向对象”abacd”。
这样,我们就能看出String和StringBuffer的区别来。对于下面的代码:
String s = “”;
for(int i=0;i<10;i++){
        s = s+i;
}
我们将产生10多个对象。而下面的代码:
StringBuffer sb = new StringBuffer();
for(int i=0;i<10;i++){
       sb.append(i);
}
只产生一个对象。
所以,在String对象需要进行相加的时候,使用StringBuffer要明显比使用String优越,特别是在循环相加的时候。
 
三、其他基本类型与String的转化
在实际的编码过程中,经常要将其他的基本类型转化为String类型,如上面的我们所常用到的例子:
String s = “”;
for(int i=0;i<10;i++){
        s = s+i;
}
中,s = s+i;语句中就需要将整型数据i转化为字符串,然后再与s相加。
其实,除了s = s+1;的这种转化方式,还有一种我们大家所不常用到的转化方式,如下:
s = s+Integer.toString(1);
经过大家对对上面两种转化方法所耗时间的测试,结果发现后面一种转化方式所耗的时间大大低于前面一种转化方式所耗的时间。
所以大家在编码的过程中,不妨使用后面的一种转化方式。
 

0 0
原创粉丝点击