知识大全 正确使用String类应注意的几点

Posted 操作

篇首语:前方无绝路,希望在转角。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 正确使用String类应注意的几点相关的知识,希望对你有一定的参考价值。

正确使用String类应注意的几点!  以下文字资料是由(历史新知网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  java lang String类对大家来说最熟悉不过了 我们写java程序很少能不用String的 本文讲述如何正确的使用String 内容主要涉及初始化 串联和比较等操作

  首先我们必须清楚的一点是String类是final类型的 因此你不可以继承这个类 不能修改这个类 我们使用String的时候非常简单 通常都是String s = hello 但是Java API中同时提供了一个构造函数为String(String s) 因此你也可以这样使用String s = new String( hello ) 对于后面这样初始化一个String的方式是不推荐的 因为new操作符意味着将会在heap上生成一个新的对象 如果这样的操作发生在一个循环中 那么代价是惨重的 比如

  Java代码

  for(int i = ;i< ;i++)

  

  String s = new String( hello );

  

  这将会创建 个String类型的对象 由于String类是final的 因此这样的操作事实上是每次都生成了一个新的String对象的 如果你使用String s = hello ;那么就可以实现复用了 为什么可以复用呢 下面会有解释

  当我们使用 + 实现串联操作的时候 比如String s = hello + world ;其实是通过StringBuffer类的append()方法实现的 最后返回String给s 如果有兴趣的话 你可以写一个简?在使用串联的时候我们同样应该注意String是final类 如果你需要多次串联比如

  Java代码

  String sql = xxx ;

  sql = xxxx ;

  sql = ssssss ;

  那么为了提高效率节省空间 我们应该自己用StringBuffer来替代 + ;

  通常对String的比较有两种情况 一个是使用== 另一个是使用equals()方法 注意==是对对象的地址进行比较的 而String中的equals()方法是覆蓋了Object类的方法 并且实现为对String对象的内容的比较 所以String s = new String( hello );String s = new String( hello ) 我们对s 和s 进行上述比较的时候 前者应该返回false 因为使用new生成的是两个不同的对象 后者应该返回true因为他们的内容是一样的 都是 hello 那么如果我们还有一个String s = hello ;他和s 的比较应该是什么样子的呢 答案是s ==s 为false equals的比较位true 事实上String类是维持着一个String池的 这个池初始化为空的 当我们String x = hello 的时候 hello就会被放入这个池中 当我们再次String y = hello 的时候 他首先去检查池中是否存在一个和hello内容一样的对象 如果存在的话就会把这个引用返回给y 如果不存在的话 就会创建一个并放入到池中 这样就实现了复用 在String有一个方法intern()他可以把String的对象放入到池冲并返回池中的对象 如果我们对s (String s = new String( hello ))调用intern s = s intern()这时候 我们再把s 和s 进行 == 的判断 你会发现结果返回true!

  看下面的例子

  Java代码

  public class StringTest

  

  public static void main(String[] args)

  

  String s = hello ;

  String s = new String( hello );

  String s = new String( hello );

  testString(s s s );

  s = s intern();

  System out println( after s intern );

  testString(s s s );

  

  private static void testString(String s String s String s )

  

  System out println( s = s is +(s ==s ));

  System out println( s = s is +(s ==s ));

  System out println( s equals(s ) is +s equals(s ));

  System out println( s equals(s ) is +s equals(s ));

  

  

  输出结果为

  s = s is false

  s = s is false

  s equals(s ) is true

  s equals(s ) is true

  after s intern

  s = s is true

  s = s is false

  s equals(s ) is true

cha138/Article/program/Java/ky/201311/28846

相关参考