• JAVA之等号、传类对象参数与c++的区别


    在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址。

    eg:

    package MyText;
    
    class ClassA
    {
    	int value;
    	public void seta(int value)
    	{
    		this.value = value;
    	}
    	public void show()
    	{
    		System.out.println("the value:" + value);
    	}
    }
    public class MyText {
    	public static void main (String []args)
    	{
    		ClassA a = new ClassA();
    		a.seta(1);
    		a.show();
    		System.out.println("a:" + a);//a的地址
    		ClassA b = new ClassA();
    		b.seta(2);
    		b.show();
    		System.out.println("b:" + b);//b的地址
    		System.out.println("======================");
    		b = a;
    		a.show();
    		b.show();
    		System.out.println("a:" + a + ", b:" + b);
    		b.seta(3);
    		a.show();
    		b.show();
    		System.out.println("a:" + a + ", b:" + b);
    	}
    }
    

    运行结果:

    the value:1
    a:MyText.ClassA@14a55f2
    the value:2
    b:MyText.ClassA@15093f1
    ======================
    the value:1
    the value:1
    a:MyText.ClassA@14a55f2, b:MyText.ClassA@14a55f2
    the value:3
    the value:3
    a:MyText.ClassA@14a55f2, b:MyText.ClassA@14a55f2

    在java中向函数传入类对象参数实际上操作的也是地址

    eg:

    package MyText;
    
    class ClassA
    {
    	int value;
    	public void seta(int value)
    	{
    		this.value = value;
    	}
    	public void show()
    	{
    		System.out.println("the value:" + value);
    	}
    }
    public class MyText {
    	public static void showClassA(ClassA a)
    	{
    		a.show();
    		System.out.println("a:" + a);
    		a.seta(5);
    		a.show();
    		System.out.println("a:" + a);
    	}
    	public static void main (String []args)
    	{
    		ClassA a = new ClassA();
    		a.seta(1);
    		a.show();
    		System.out.println("a:" + a);
    		showClassA(a);
    		a.show();
    		System.out.println("a:" + a);
    	}
    }
    

    运行结果:

    the value:1
    a:MyText.ClassA@5e55ab
    the value:1
    a:MyText.ClassA@5e55ab
    the value:5
    a:MyText.ClassA@5e55ab
    the value:5
    a:MyText.ClassA@5e55ab
    而在C++中向函数传递类对象参数时,是按值传递的,即实参与形参间进行成员变量赋值操作,而不是地址

    eg:

    # include <iostream>
    using namespace std;
    
    class ClassA
    {
    private:
        int value;
    public:
        void seta(int value)
        {
            this->value = value;
        }
        void show()
        {
            cout<<"the value : "<<value<<endl;
        }
    };
    void show(ClassA a)
    {
        a.show();
        cout<<"a:"<<&a<<endl;
        a.seta(5);
        a.show();
    }
    int main ()
    {
        ClassA a;
        a.seta(3);
        a.show();
        cout<<"a:"<<&a<<endl;
        show(a);
        a.show();
    }
    

    运行结果:

    the value : 3
    a:0x22fefc
    the value : 3
    a:0x22fea0
    the value : 5
    the value : 3


    Process returned 0 (0x0)   execution time : 0.130 s
    Press any key to continue.
    对于利用等号对对象进行赋值,实际上也是对对象成员的值按值传递,而不是传递地址

    eg:

    # include <iostream>
    using namespace std;
    
    class ClassA
    {
    private:
        int value;
    public:
        void seta(int value)
        {
            this->value = value;
        }
        void show()
        {
            cout<<"the value : "<<value<<endl;
        }
    };
    int main ()
    {
        ClassA a;
        a.seta(3);
        a.show();
        cout<<"a:"<<&a<<endl;
        ClassA b;
        b.seta(4);
        b.show();
        cout<<"b:"<<&b<<endl;
        b = a;
        a.show();
        b.show();
        cout<<"a:"<<&a<<", b"<<&b<<endl;
        b.seta(6);
        a.show();
        b.show();
        cout<<"a:"<<&a<<", b"<<&b<<endl;
    }
    


    运行结果:

    the value : 3
    a:0x22fefc
    the value : 4
    b:0x22fef8
    the value : 3
    the value : 3
    a:0x22fefc, b0x22fef8
    the value : 3
    the value : 6
    a:0x22fefc, b0x22fef8


    Process returned 0 (0x0)   execution time : 0.132 s
    Press any key to continue.

  • 相关阅读:
    [HAOI2015]树上染色 [树形dp]
    【luogu1052】 过河 [动态规划]
    【luogu4819】 [中山市选]杀人游戏 [tarjan 缩点]
    【luogu4185】 [USACO18JAN]MooTube [并查集]
    [国家集训队]墨墨的等式 [差分约束]
    【RMQ】
    [USACO05DEC] 布局 [差分约束]
    [SCOI2011]糖果 [差分约束]
    【POJ 1201】Intervals
    【luogu1993】 小K的农场 [差分约束]
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3299312.html
Copyright © 2020-2023  润新知