JR 精品文章 - 研究String对象的例子。
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java入门 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
研究String对象的例子。
nuaaqy 原创   更新:2006-06-13 20:04:19  版本: 1.0   

原先对String研究的比较透彻了,今天突然发现又忘了,所以写一个测试的方法。以后忘了就拿出来看看。
下面是原代码。

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 在堆创建了了个""对象,当然和常量池的""不一样了啊。    

    }
}


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     16       3
作者其它文章: 作者全部文章
评论人:yanglenovo 发表时间: Wed Aug 22 03:05:10 CST 2007
[han]

这个文章共有 1 条评论
主题: 足球-世界杯-EasyJF开源团队 上一篇文章
返回文章列表 返回〔Java入门〕
下一篇文章 主题: 马化腾:腾讯还没能力缔造新微软帝国


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号