zoukankan      html  css  js  c++  java
  • ==和equals在比较字符串时候的区别

    作为一个菜鸟  之前一直迷茫 都说比较字符串要用equals()方法  但是有时候用==貌似也可以  话不多说  先来一个例子

    public static void main(String[] args) {
        String str1="str";
        String str2="str";
        System.out.println(str1==str2);//返回true

      
    System.out.println(str1.equals(str2));//返回true
    }

    返回一个 true

     再来一个用==不行的例子

    public static void main(String[] args) {
        String str1=new String("str");
        String str2=new String ("str");
        System.out.println(str1.equals(str2));//返回true
        System.out.println(str1==str2);//返回false
    
    }

     经过比较得知  new()出来的字符串不能用==比较

    有以下两种原因 

      1、equals()方法比较的是两个对象值   而==比较的两个引用是否指向同一个对象   有些同学要问了  为什么直接=字符串和new()字符串难道不同吗?  对的 第二点就是new和=的区别

      2、用=时 会在字符常量串常量池中创建 如 string  s="123"; 字符串常量池不属于堆也不属于栈  这样就会在字符串常量池创建“123”(如果字符串常量池中已经有“123” 就把s引用指向它)。再创建一个string s1=“123”;

        会把s1的引用指向已经存在的“123”;而不会再创建一个 这样s和s1的引用都是一样的 用==也可以判断出来

        用new()时  不管字符串常量池中有没有  都到从堆内存中开辟一块空间存放 new一次 开辟一次 所以 String str1=new String("str"); String str2=new String ("str");是不同的两块空间 所以引用也就不相同的

        ==只会判断两个引用是否指向同一个对象(也就是同一块内存地址) 所以这时候用==是false

     结论

      1、==用于比较两个引用是否指向同一个对象   equals用于比较两个对象是否相等

      2、由于字符串特殊 在字符串常量池中的字符串可以使用==也可以使用equals 推荐不管哪种方式 只要是比较字符串就用equals

  • 相关阅读:
    什么是API
    Maxiee的Vim入门日记(4)——安装windows下的Cscope
    将字符串变成大写----C++实现
    POJ 3254 炮兵阵地(状态压缩DP)
    UIKit和Core Graphics绘图(三)——绘制虚线,椭圆以及饼图
    CRC 模式及实现
    [HDU 1317]XYZZY[SPFA变形][最长路]
    poj 2155 Matrix
    [置顶] Application,Session,Cookie之Application对象
    [Todo] Java及C++ Exception整理
  • 原文地址:https://www.cnblogs.com/guoyafenghome/p/8542097.html
Copyright © 2011-2022 走看看