论坛首页 Java企业应用论坛

全面理解Java中的String数据类型

浏览 14423 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-11  
写的还是可以的
0 请登录后投票
   发表时间:2007-09-11  
还是对理解string类型有帮助的。
0 请登录后投票
   发表时间:2007-09-11  
呵呵,不是太全面...
面试么,离不开String ,StringBuffer,==&&equals的区别
0 请登录后投票
   发表时间:2007-09-12  


最后我再破除一个错误的理解:

有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的:

看例4:

String s1=new String("kvill");
String s2=s1.intern();
System.out.println( s1==s1.intern() );
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );

结果:

false
kvill kvill
true

在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的,当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。

s1==s1.intern()为false说明原来的“kvill”仍然存在;

s2现在为常量池中“kvill”的地址,所以有s2==s1.intern()为true。

s1 = new String("kill");这段代码是产生两个对象,一个是“kill”,该对象存入常量池中,另一个是复制“kill”的值新产生一个对象(new)并返回给s1,所以s1=new String(“kill”);实际上已经在常量池里注册了一个“kill”。

String构造函数:

String

public String(String original)
Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string. Unless an explicit copy of original is needed, use of this constructor is unnecessary since Strings are immutable.

Parameters:
original - a String.
the newly created string is a copy of the argument string  这句话说明原因
0 请登录后投票
   发表时间:2007-09-12  
谢了大家,String还是满耐研究的哦
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics