zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法
    小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
    送给那些经常问我如何设置360测速结果为电信的朋友,360测速模块原理简单分析
    Universal-Image-Loader(UIL)使用方法&流程图&源码分析 ----- 未完
    Android开发框架
    Android线程池的使用(未完)
    Android LruCache究竟是什么
    Java finally语句到底是在return之前还是之后执行?
    Android自定义图片加载框架
    Android 自定义View实现单击和双击事件
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3299312.html
Copyright © 2011-2022 走看看