在String中==和equals的区别Java认证考试

文章作者 100test 发表时间 2009:07:16 20:03:41
来源 100Test.Com百考试题网


  下面是源代码(存为Java文件,编译运行,推敲下结果):
  public class DosShell {
  public static void main(String[] args) {
  // 开始测试了。
  System.out.println("Hello world").
  //定义两个对象,并初始化。
  String c = "Check equal method".
  String d ="Check ".
  //这样d 和 c是一样的麽?
  d = "equal method".
  System.out.println("c.equals(d)的结果并不表示c和d到底是不是引用的一个对象,因为它被重载了.结果:" (c.equals(d))).
  System.out.println("c==d的结果表示c和d到底是不是引用的一个对象.结果:" (c==d)).
  //intern方法是干什么的呢?原来是返回 常量池 中的常量的引用(如果没有就创建一个)。那么下面的结果是什么呢?
  System.out.println("use intern method c==c.intern()-->." (c==c.intern())).
  System.out.println("use intern method d==c.intern()-->." (d==c.intern())).
  System.out.println("use intern method c==d.intern()-->." (c==d.intern())).
  System.out.println("use intern method d==d.intern()-->." (d==d.intern())).
  //原来c直接是引用的常量池中,而d不是。难怪c!=d.
  //下面这个简单
  String s1 = "123".
  String s2 = "345".
  System.out.println("String s1 = \"123\";String s2 = \"345\"").
  System.out.println("s1==s2: " (s1==s2)).
  System.out.println("s1.equals(s2): " s1.equals(s2)).
  System.out.println("s1.hashCode()==s2.hashCode():" (s1.hashCode()==s2.hashCode())).
  //让s2的引用变一下
  s2 = "123".
  System.out.println("s2 = \"123\".").
  System.out.println("s1==s2: " (s1==s2)).
  System.out.println("s1.equals(s2): " s1.equals(s2)).
  System.out.println("s1.hashCode()==s2.hashCode():" (s1.hashCode()==s2.hashCode())).
  //原来都是true,都是引用的常量池,如果这样呢?
  s2 = new String("123").
  System.out.println("s2 = new String(\"123\").").
  System.out.println("s1==s2: " (s1==s2)).
  System.out.println("s1.equals(s2): " s1.equals(s2)).
  System.out.println("s1.hashCode()==s2.hashCode():" (s1.hashCode()==s2.hashCode())).
  //new 方法在堆中创建了一个新的对象,而s2引用了它,不再是原来引用的常量池了。
  //看看这个结果
  s2 = new String().
  System.out.println(s2).
  //这个语句相当于s2 = new String("").和下面的不一样。
  String s3 = null.
  System.out.println(s3).
  //再来看看intern方法,说明了什么??
  String s4 = new String().
  System.out.println("use intern method s4==s4.intern()-->." (s4==s4.intern())).
  //new 在堆创建了了个""对象,当然和常量池的""不一样了啊。
  }

相关文章


谈谈Java加密技术(四)Java认证考试
漫谈Java加密技术(三)Java认证考试
漫谈Java加密技术(二)Java认证考试
漫谈Java加密技术(一)Java认证考试
在String中==和equals的区别Java认证考试
Java高手必会的要点Java认证考试
根据J2ME虚拟机对程序编写的优化方式Java认证考试
J2ME实践:减少图片以减小JAR文件大小Java认证考试
全面比较AWT和SwingJava认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛