==与equal()的区别

在看区别之前,首先来看下以下代码:

public class TestEqual {

    /**
     * @param args
     *  I am not responsible of this code.
      *  They made me write it, against my will.
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String a = "111";
        String b = "111";
        String c = new String("111");
      
        int a1 = 111;
        int b1 = 111;
        Integer c1 = new Integer(111);
        Integer c2 = new Integer(111);

        System.out.println(a == b);  //true
        System.out.println(a == c);     //false
        System.out.println(c == b);  //false
        System.out.println(a.equals(c)); //true
        System.out.println("**************************");
        System.out.println(a1 == b1); //true
        System.out.println(a1 == c1); //true
        System.out.println(c2 == c1); //false
        System.out.println(a.equals(c1)); //false
        System.out.println(c1.equals(c2)); //true
    }

}

  (一) "=="

  首先先看定义的三个字符串对象,他们的值都是111。但a==b时,值为true 而 a==c时,为false,为什么呢?

  String a = "111"  当表达式执行的时候,会首先去内存中的字符串池中去找,看有没有"111"这个字符串,如果没有的画,就在字符串池中创建一个,等String b = "111"时,则a,b其实是指向了同一片内存地址空间。而String c = new String("111")则不会去字符串池中查找,是直接创建一个"111",所以String c = new String("111")时,它会再创建一个,所以这时a,c指向的是不同的内存空间。
  当==用于比较对象的引用时,实质上是比较两个引用的地址是否相等。其中java的双引号表达式本身就会创建一个字符串对象。

  其次再看定义的两个int型变量以及两个Integer对象。a1==b1毫无疑问他两值相等,为true。而a1==c1也为true,这又是为什么呢?

  其实自jdk1.5之后,基本类型的所对应的引用类型可以自动转换成基本类型与基本类型进行值比较.(自动拆箱)..而a1==c1实质上变成了a1== c1.intValue()

  当==用于比较基本数据类型时,实质上就是比较他们的值是否相同。

  (二)equal()

    由a.equals(c)与c1.equals(c2)他们值为true,看出他们比较的对象是相同的。

  equal()来判断两个对象是否相等。对于字符串来说,也是比较字符串的字符序列是否相等。

  结果的得出与上边叙述无关系,只做解释而已

时间: 2024-10-12 08:28:52

==与equal()的区别的相关文章

Java 中 == 和 equal 的区别 (String)

String s1 = "abcd"; String s2 = "cdfe"; s1 == s2; // 比较s1和s2这2个对象的地址,如果一样,则为true,否则为false s1.equal(s2); //比较s1和s2的内容,如果相同则为true Java 中 == 和 equal 的区别 (String),布布扣,bubuko.com

iOS开发 == 和 equal的区别和联系

对于普通的数据类型,只要值相等==就会返回true,对于两个指针类型的变量,他们必须指向同一个指针变量,也就是他们指向的地址必须相等. equal和使用==来判断两个对象是否相等没有区别. 但是有时候我们比较字符串的时候只要值相等就可以返回true,那是因为重写了equal方法. 对于这个方法,我们可以自己定义他们相等的条件,所有的类都继承自NSObject类,我们都可以重写这个方法. 对于字符串比较,字符串还定义了一个isEqualToString的方法,专门用来判断字符串序列等不等 有一个问

java中 == 与 equal 的区别

先看代码,以及运行结果 public static void main(String[] args) { System.out.println("对象比较"); String str1=new String("str"); String str2=new String("str"); System.out.println("==比较"+(str1==str2)); System.out.println("equal比

java中==与equal()的区别

==和equal()都是用来判断两个变量是否相等的. (1)如果两个变量是基本类型变量,且都是数值型的(不一定数据类型相同),只要是值相同,将返回true; (2)如果两个变量是引用型变量,只有它们指向同一个对象时,==才返回true; (3)equal比较的是两个字符串,只要两个字符串的字符对应相等,就返回true. int it=65; float f1=65.0f; //it==f1 为true char ch=‘A’; //it==ch 为true String str1 = new S

java中==和equal的区别

今天看到了一篇写的很好的博客,所以就转来了 转载地址:http://xiashengchao.iteye.com/blog/753409 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同. ==比较的是2个对象的地址,而equals比较

==与equal的区别

equal主要是判断对象的内存地址引用是不是同一个,即是不是同一个对象 ==比较的是内存地址是否相等 若一个变量指向数据是对象类型的,此时涉及两块内存,对象本身占一块内存(堆内存),变量也占一块内存 Object obj=new Object(); 变量obj是一个内存,new Object()是另一个内存. 变量obj的内存中的数值就是对象占用内存的首地址 String a=new String(''n''); String b=new String(''n''); 创建两个对象,a.b两个变

Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑

判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍又一遍的告知: === 要求变量的类型和值均相等,才能返回true. 使用 === 来避免因JavaScript 类型转换带来的问题. 这样增加了 JavaScript 语法的灵活性但是也带来很多头疼的问题: 使用 ==/!=是 ===/!== 来判断两个变量是否相等? 为什么,JS 编码推荐使用

java中的equal函数和==

这道题是我注册德问的时候做到的一道简单的概念题目.这里主要借这道题帮大家区分一下在java中"=="和equal的区别: 记住一下两句话就足够了: 1."=="比较的是地址,如果两个对象指向内存中的同一块区域的时候,即地址相同,为true,否则为false 2.equal()比较的是对象的值.

Java基础概叙

写在开头 我没有很牛逼的技术来概括Java的前世今身,这里主要是结合自己对Java的基础的理解,大致给到一些总结. 结合自己最近读的一些书籍,总结下,正如这句话所说:Read a bit and take it out,then come back read some more. 正文 1. Java语言支持4种类型:Interface.class.array.primitive 前三种通常称为引用类型,class实例.array是对象(Object),而primitive的值则不是Object