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方法,此时比较的就是对象地址。

        

        

  • 相关阅读:
    burpsuite 关于部分https抓包失败原因
    记一次对汉明科技无线运营系统审计的过程
    nmap script 总结
    python argparse总结
    unix 密码破解,zip破解总结
    python 反向shell后门
    结构体的不完整声明
    [转载][来自csdn]RTS和CTS是什么意思?
    博客开通成功
    system系统调用返回值判断命令是否执行成功
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/9952685.html
Copyright © 2011-2022 走看看