zoukankan      html  css  js  c++  java
  • String比较相等的问题探索

    String比较相等的问题探索###

    工作上,有个同事犯了个低级错误,把字符串的计较用了==。由于代码已经交付客户,上了生产环境,给公司带了了损失。于是看了他的代码,自己根据以前学的知识,写了几个小demo,加深自己对字符串比较的认识。
    例1:

    !java

    public static void main(String[] args) {
    String string= "";
    if (string=="") {
    System.out.println("相等");
    } else {
    System.out.println("不等");
    }
    }

    run:
    相等
    例2:

        #!java
    public static void main(String[] args) {
    	String string= new String("");
        if (string=="") {
    		System.out.println("相等");
    	} else {
            System.out.println("不等");
    	}  
    }
    

    run:不等

    上面两例说明,String是对象,对象用==是比较的地址,例一之所以相等,是因为如果用赋值的方式来定义字符串,如果这个字符串已经定义过了,则字符串常量池中已经有此字符串了,就不会再重新生成一个。如果字符串常量池中没有此字符串,就会生成一个。例2的方式,是先在堆内存新建了个对象,对象里存有指向字符串常量池的地址(字符串在常量池的生成和上面原理一样)。也就是说例2中的对象地址不等于字符串的地址。

    但是如果我们用String自带的equals方法,就不会出现这种情况。字符串的equals方法重写了Object的equals方法,比较的是内容。所以
    我们在开发中,比较字符串都是用equals方法。

  • 相关阅读:
    Centos 7 快速安装 Docker
    MySQL乱码
    阿里云中linux 下svn服务器安装
    java中易错点(二)
    java中易错点(一)
    mysql5.7.24 解压版安装步骤以及遇到的问题
    linux交换分区调整
    linux之切换用户su(switch user)
    linux简单常用命令
    Yum简单使用小结
  • 原文地址:https://www.cnblogs.com/westward/p/5176193.html
Copyright © 2011-2022 走看看