zoukankan      html  css  js  c++  java
  • Java中关系操作符==的学习以及与equals的对比

    1.一个实例如下:

    public class TestObject {
        public static void main(String[] args) {
            // TODO Auto-generated method stub

       int o=3;

            int p=3;
            Integer l=3;
            Integer m=3;
            Integer n=new Integer(3);
            String r="hello";
            String s="hello";
            String t=new String("hello");
            String u=new String("hello");

       Integer v=128;

       Integer w=128;

       System.out.println(o==p);             //ture    (1)

            System.out.println(o==m);            //true     (2)
            System.out.println(l==m);            //true      (3)
            System.out.println(m==n);           //false     (4)
            System.out.println(r==s);             //true      (5)
            System.out.println(s.equals(t));   //true       (6)
            System.out.println(s==t);            //false      (7)

       System.out.println(t==u);            //false      (8)

       System.out.println(v==w)            //false      (9)
        }
    }

    2.关系操作符“==”

    关系操作符==实际比较的是符号两边的值,

     a.当==号两边都为基本类型时,直接进行值比较,如结果(1),变量o和p存储的值均为3,所以结果为true。

     b.当==号两边都为对象类型时,此时变量的值是对象地址,如结果(4)、(7)、

       (8)、(9),此时由于变量中存储的对象地址不同所以返回结果为false。此时我们会有一个疑问,为什么结果(2)、

     (3)、(5)返回为true,这里可以顺便解释一下,以对int、Integer、string基本类容的回顾:

      1)int与Integer

        int和Integer在进行比较时,Integer会自动拆箱,转为int值与int进行比较,所以结果(2)返回为true。

             Integer和Integer直接赋值进行比较时,Integer会自动装箱,这时会面临一个选择:当变量x在区间[-128,127]之间时,

        将会直接缓存在整型变量池中,当新的变量赋值在这个区间的时候就不会创建新的Integer对象,二是从整型变量池中获取

        已经创建好的Integer对象;当变量x大于这个范围时,会直接new Integer创建一个新的Integer对象。所以结果(3)

        为true,而结果(9)为false。

      2)string=“”与new String()

        String s1="a",直接赋值的字符串变量存储在常量存储区中的字符串变量池中,new String("a")存储在堆中,当直接赋值一个相同的

        字符串String s2="a"时,此时s2也指向字符串常量池中的a,所以结果(5)为true,结果(8)为false。

    3.equals

     equals方法是Object的方法,因此所有的类默认都有该方法,Object类中equals方法比较的是对象地址,但是结果(6)为什么是

     true呢,这是因为String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等,Java中大多数类都会对

     equals方法进行重写,没有重写的话默认继承Object中的equals方法,此时比较的就是对象地址。

        

        

  • 相关阅读:
    IEEE 网址
    知乎上非常棒的机器学习专栏
    怎样认识比你优秀的人并和他们成为朋友?
    影藏铜皮,显示原点与更改
    PCB检查事项,生成钻孔表
    布局-同样模块复用
    制作DIP Package及DIP焊盘制作,不规则焊盘制作
    制作SMD Package及SMD焊盘制作
    导入网络表
    导入DXF文件
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/9952685.html
Copyright © 2011-2022 走看看