黑马程序员技术交流社区

标题: 关于“equals()”和“==”的使用总结(补充一张图) [打印本页]

作者: 棉/mg花/x糖    时间: 2014-2-13 22:05
标题: 关于“equals()”和“==”的使用总结(补充一张图)
本帖最后由 棉/mg花/x糖 于 2014-2-13 22:05 编辑

关于“equals()”和“==”的使用总结

(1)str1 == str2表示比较str1与str2两个字符串是否引用同一个对象;
(2)str.equals(str2)是表示比较str1与str2两个字符串的内容是否相等;
(3)为了比较基本数据类型变量的值是否相等一般是使用“==”,但这个办法并不适用String对象(或者其
        他任何对象)。即不适用引用类型的比较

请看下面的例子:Test4.java
(1)输出结果为:
         false
         false
         true
         true
         false
         true
(2)对于str1和str3,都是引用同一个字符串常量"abc",其内容也当然相同。
        故"str1 == str3"和"str.equals(str3)"均取真值true。
(3)对于str1和str4,内容虽然相同,但引用的却不是同一对象。原因在于:
        str1引用的是的编译时就确定的字符串常量,而str4引用的是程序运行时才创建的对象。

也就是说:字符串常量"abc"是在编译时就写到内存了。

示例源码如下:
  1. package com.yb.Test;

  2. public class Test4 {
  3.     /**
  4.      * @param args
  5.      */
  6.     public static void main(String[] args) {
  7.         // TODO Auto-generated method stub
  8.         String str1 = "abc";
  9.         String str2 = "Abc";
  10.         String str3 = "abc";
  11.         String str4 = new String("abc");
  12.         System.out.println(str1 == str2);        //输出false
  13.         System.out.println(str1.equals(str2));   //输出false
  14.         System.out.println(str1 == str3);        //输出true
  15.         System.out.println(str1.equals(str3));   //输出true
  16.         System.out.println(str1 == str4);        //输出false
  17.         System.out.println(str1.equals(str4));   //输出true
  18.     }
  19. }
复制代码

内存分析图:








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2