zoukankan      html  css  js  c++  java
  • String中==的用法

    
    
    
    
     1 public class Str_test {
     2 
     3     public static void main(String[] args) {
     4 
     5         // String pool
     6         // ==比较是否是同一个引用;对于String对象的相等性用equals(),因为该方法已经被override!(Object的equals()比较就是用==判断引用是否相等)
     7         // Array没有重写Object的equals(),Arrays重写过
     8         String a = "he";
     9         String b = "llo";
    10         String c = "hello";
    11         String d = new String("hello");
    12 
    13         System.out.println(c == a + b);// false
    14         System.out.println(c == a + "llo");// false
    15         System.out.println(c == (a + b).intern());// true
    16         System.out.println(c == (a + "llo").intern());// true
    17         System.out.println(c == "he" + "llo");// true reason:c:String pool
    18         // 中建立"hello"
    19         // "he"+"llo"成为一个新String找到String
    20         // pool存在"hello",所以相等
    21         System.out.println(c == d);// false
    22 
    23         System.out.println(c == d.intern());// true 1
    24 
    25         System.out.println(d == d.intern());// false 2
    26 
    27     }
    28 
    29 }
    annotation:
    intern()的用法:
    第一个"true"就解释了第一个疑问、intern把d的内存指向为c、所以二者相等、 字符串池中应该有两个"Hello",一个是c的引用,另外一个则是d用new出来的空间, 但使用intern后其实已经指向c的内存空间了,所以才会输出"false" 在未存在c的情况下,Stirng d = new Stirng("Hello");其实应该有两个对象,一个是创建栈中字符串池的"Hello", 另外一个是对变量"d"的指向,存在于堆内存中。用new关键字不管池中有没有都会开辟一块内存空间,只有String pool没有创建某个字符串常量时,才在池中创建该地址

     
    
    
    
     
  • 相关阅读:
    IIS相关知识
    C#小知识
    DOS与批处理
    Visual Studio与Chrome调试工具使用技巧
    CLR via C# 随记
    jQuery Plugin Docs
    FlexPaper使用小结
    软件测试分为几个阶段 各阶段的测试策略和要求是什么?
    软件产品质量特性是什么?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试
  • 原文地址:https://www.cnblogs.com/ylfeiu/p/3403028.html
Copyright © 2011-2022 走看看