• 选学校
  • 高中毕后选择什么学校好
  • 启蒙星
  • 北大青鸟课程介绍
  • 北大青鸟助你走上高级软件工程师修炼之路
  • 转行不是梦,学北大青鸟IT培训
  • 北大青鸟辉煌12年
  • 株洲北大青鸟校区升级

您现在的位置:株洲北大青鸟 >> >> 师资力量>> 技术天地

师资力量
开班信息
输入姓名手机号码预约试听课程
姓  名:*
手机号:*
创业摇篮班
开班日期:10月15日
招生人数:25
就业直通班
开班日期:10月31日
招生人数:25
就业精英班
开班日期:9月13日
招生人数:已满
技术天地
  • 字符串的比较
  • 发表日期:2009/6/21 17:17:11 阅读数:460  
  •  
  •                                             字符串的比较

                                                  株洲北大青鸟  李栋

    字符串是引用个数据类型。使用==比较的是引用地址,使用equals比较的是内容。

    例子A
       String str1 = "java";
       String str2 = "java";
       System.out.print(str1==str2);
    地球上有点Java基础的人都知道会输出false,因为==比较的是引用,equals比较的是内容。不是我忽悠大家,你们可以在自己的机子上运行一 下,结果是true!原因很简单,String对象被放进常量池里了,再次出现“java”字符串的时候,JVM很兴奋地把str2的引用也指向了 “java”对象,它认为自己节省了内存开销。不难理解吧 呵呵
    例子B
       String str1 = new String("java");
       String str2 = new String("java");
       System.out.print(str1==str2);
    看过上例的都学聪明了,这次肯定会输出true!很不幸,JVM并没有这么做,结果是false。原因很简单,例子A中那种声明的方式确实是在 String常量池创建“java”对象,但是一旦看到new关键字,JVM会在堆中为String分配空间。两者声明方式貌合神离,这也是我把如何创 建字符串对象放到后面来讲的原因。大家要沉住气,还有一个例子。
    例子C
       String str1 = "java";
       String str2 = "blog";
       String s = str1+str2;
       System.out.print(s=="javablog");
    再看这个例子,很多同志不敢妄言是true还是false了吧。爱玩脑筋急转弯的人会说是false……恭喜你,你会抢答了!把那个字去掉你就完全正确。原因很简单,JVM确实会对型如String str1 = "java"; String对象放在字符串常量池里,但是它是在编译时刻那么做的,而String s = str1+str2; 是在运行时刻才能知道(我们当然一眼就看穿了,可是Java必须在运行时才知道的,人脑和电脑的结构不同),也就是说str1+str2是在堆里创建的, s引用当然不可能指向字符串常量池里的对象。没崩溃的人继续看例子D
    例子D
       String s1 = "java";
       String s2 = new String("java");
       System.out.print(s1.intern()==s2.intern());
    intern()
    是什么东东?反正结果是true。如果没用过这个方法,而且训练有素的程序员会去看JDK文档了。简单点说就是用intern()方法就 可以用“==”比较字符串的内容了。在我看到intern()方法到底有什么用之前,我认为它太多余了。其实我写的这一条也很多余,intern()方法 还存在诸多的问题,如效率、实现上的不统一……
    例子E
       String str1 = "java";
       String str2 = new String("java");
       System.out.print(str1.equals(str2));
    无论在常量池还是堆中的对象,用equals()方法比较的就是内容,就这么简单!

上一篇:Java中static、this、super、final用法简谈
下一篇:字符串杂谈
分享到:

版权所有 ©株洲健坤科技职业培训学校    学校地址:株洲市天元区黄山路205号健坤大厦(天元区消防中队对面)

咨询报名热线:400-8812-866    邮箱地址:4008812866@b.qq.com   备案号: 湘ICP备10202015号  

北大青鸟学费是多少 湖南北大青鸟怎么样
株洲北大青鸟好不好 株洲北大青鸟学费多少 株洲北大青鸟学校这么样
秒速时时彩官方网站