zoukankan      html  css  js  c++  java
  • java中String与equals,==详解

    首先,String str1="abc",这个str1所指向的是常量池中的一块内存。

    如果又有,String str2="abc",那么str1和str2所指向的是同一块内存。

    其次,String str3=new String("abc"),那么str3所指向的是堆中的一块内存。

    str3.intern(),这个方法在常量池中查找是否存在字符串"abc",如果存在的话就返回这个

    地址,如果不存在,那么在常量池中生成字符串"abc",并返回该地址。

    下面谈谈equals,==这两个方法

    对于其他的java类,equals和==是等价的,都是比较两个引用的地址

    而对于String类来说,java重写了它的equals函数,equals函数不再比较地址,而是比较其值

    而==依然比较两个String引用的地址。

    另外,String还从Object类继承了hashCode方法,对于其它类来说,hashCode()是以地址来进行

    散列的,而String类既然重写了equals方法,自然也要重写hashCode()方法。String的hashCode()方法

    是以其值来进行散列的。

    public class test {     
        public static void main(String[] args) {     
            String str = "abc";     
            String str1 = "abc";     
            String str2 = new String("abc");     
            System.out.println(str == str1);//true     
            System.out.println(str1 == "abc");//true  
            System.out.println(str2 == "abc");//false     
            System.out.println(str1 == str2); //false    
            System.out.println(str1.equals(str2)); //true    
            System.out.println(str1 == str2.intern()); //true    
            System.out.println(str2 == str2.intern());  //false   
            System.out.println(str1.hashCode() == str2.hashCode());//true     
       } 
      }

    这个例子做出很好的演示

  • 相关阅读:
    poj2186强连通分量
    poj1459SAP最大流模板题
    poj2391Floyd+二分+最大流
    curl上传下载入门
    Mysql存储过程
    小球旋转
    钟表单摆
    java小记 摘抄
    servlet的一些收集总结
    Javascript基础小结
  • 原文地址:https://www.cnblogs.com/elnino/p/5853503.html
Copyright © 2011-2022 走看看