zoukankan      html  css  js  c++  java
  • Java中关于“=”和“==”的分析

    Java中变量分为普通原始变量(int char float等)和对象

    一“=”
    (1)普通原始变量
    普通原始变量的声明和赋值语句例如以下

                int a=3;
                int b=a;

    此时a和b都为普通原始变量。这里的内存使用情况例如以下
    第一行在内存中开辟一块内存(大小为int所占的大小)。并将这块内存用a标示。这时a的值的就是这块内存的内容。第二行b=a就是在内存中再开一块内存(大小为int所占的大小)可是这块内存的地址和第一行的地址是不一样的。可是软件人员也不知道所以不能直接使用内存。

    此时将a中的内容拷贝一份然后填充在b所表示的内存块中。运行完这两行代码后结果就是
    开辟两块不同的内存,可是这两块内存中的内容是同样的。


    (2)包装器和对象
    如果A是一个类。如今有例如以下代码

        A a;
        a=new A();
        A b=a;

    这时候第一行代码就是在内存中开辟一块内存。并把这块内存标记为A类的引用,可是这块内存中的内容为null,表示这个A类的引用并不指向不论什么内存。
    第二行代码就是先开辟一块内存。这块内存中的大小就是创造出A类一个默认对象的大小,然后创建一个A类的对象,将这个对象放入到这块内存中。然后再把这块内存的地址填充到引用变量a的内存中。
    第三行代码就是先开辟一块内存。这块内存类型为A类对象引用并标记为b。然后将a内存中内容拷贝一份放到b内存中,所以b的引用也是第二行代码中创建的存放A类的对象的那块内存。
    这三行代码运行完后。在内存中开辟了三块内存块。第一个内存块用a标示。类型为A类对象的引用,第二个内存块没有名字,类型为A类的对象,第三个内存块用b标示。类型也为A类对象的引用。

    二 “==”
    (1)普通原始变量

            int a=3;
            int b=3;
            System.out.println(a==b);

    此时在内存中开辟了两块内存块,被标示为a和b,内容都是3。这时候a==b比較的就是两块内存中的内容。

    输出为true
    (2)包装器和对象
    如果有A类

            A a=new A();
            A b=new A();
            A c=a;
            System.out.println(a==b);
            System.out.println(a==c);
            System.out.println(b==c);

    第一行代码就是a为一块内存块,内容为还有一块A类对象内存块的地址(如果为x)。
    第二行代码就是b为一块内存块,内容为还有一块A类对象内存块的地址(如果为y)。


    第三行代码就是c为一块内存块,内容为和a所指向地址同样的内存块的地址(x)。
    a==b推断的就是a内存块和b内存块中的内容,由于指向两块内存块的地址不同,所以第七行输出false
    a==c推断的就是a内存块和c内存块中的内容,由于存放的都是第一行代码所产生的A类对象的内存块的地址。所以是同样的,输出true
    b==c推断的是b内存块和c内存块中的内容,可是这两块的内存块中的内容是不同A类对象内存块的地址。所以输出false.

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7353579.html
Copyright © 2011-2022 走看看