`
473687880
  • 浏览: 486679 次
文章分类
社区版块
存档分类
最新评论

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.

分享到:
评论

相关推荐

    java语言与面向对象程序设计作业题与参考答案汇编.doc

    JAVA语言与面向对象程序设计作业1 单项选择题 第1题 以下由for语句构成的循环执行的次数是()。 for(int i=0;true;i++); A、有语法错误,不能执行 B、无限次 C、执行1次 D、一次也不执行 答案:B 第2题 以下标识符...

    07.java等号和equals的区别.avi

    07.java等号和equals的区别.avi

    corejava基础重要知识点总结

    java的优势? 1:跨平台(平台:指的是操作系统) 常见的操作系统:Windows Unix Linux Solaris(Sun) 跨平台:用java开发出来的应用程序不受底层操作系统的限制 底层的功臣:JVM = java虚拟机 = 1 + 2 + 3 = ...

    C++ 表达式求值(采用类模板写的)

    C++ 表达式求值,运用类模板技术,自己写的栈类Stack,运算符优先级等,希望大家有兴趣下载用! 对学习数据结构的很有用哦!!

    C++ MFC编写的计算器(已修正等号BUG)

    用VS2010 C++写的MFC计算器,功能包括四则运算和存储记忆、退格、清零等,可以实现连续运算,新修正了等号的BUG

    java 程序设计 期中考试.doc

    9.在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象. ( × ) 10.只能利用Thread类的子类来创建线程. ( × ) 1.按以下要求编写程序 (1) 创建一个Rectangle...

    两个等号与三个等号的区别

    NULL 博文链接:https://jiangzhenwei6.iteye.com/blog/764267

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    【05-面向对象(下)】

    则与之相反。 •包装类还可以实现基本类型变量和字符串之间的转换,除了Character之外的所有包装类都提供了一个 parseXxx(String s)静态方法。 •如果将基本类型转换为这符串,只需在后面加+ “”进行连接...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    C++类中的特殊成员函数示例详解

    前言 C++类中有几个特殊的非静态成员函数,当用户未定义这些函数时,编译器将给出默认实现。C++11前有四个特殊函数,C++11引入移动语义...C++11新增,该类的右值对象为参数的构造函数,其余同复制构造函数。 6、移动

    C++实现复数的加减乘除运算

    用C++实现复数的加减乘除运算,运用了C++中的运算符重载的知识,对于学习运算符重载和C++有很大的参考价值

    Java面向对象程序设计.doc

    《Java面向对象程序设计》模拟试题(A卷)赞赞 " " " " "《Java面向对象程序设计》模拟试题(A卷) " "专业年级:学号: 姓名: 日期: " "一、判断题(15') " "1.Java程序里,创建新的类对象用关键字new,回收无用的...

    等号运算符重载

    等号运算符重载 函数重载 c++代码 开发工具:VS2010

    C++实现桌面计算器

    C++实现桌面计算器,以等号结束,Devc中直接使用

    C++ 11新特性之大括号初始化详解

    本文主要给大家介绍了关于C++11新特性之大括号初始化的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: C++11之前,C++主要有以下几种初始化方式: //小括号初始化 string str(hello); ...

    基于java的简易计算器

    基于java的简易计算器,实现简单的加减乘除功能,用于学习java基础知识参考

    JAVA语言程序设计复习题.doc

    ( ) 在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋 值对象相同的新对象。 4. ( ) 所有的鼠标事件都由MouseListener监听接口的监听者来处理。 5. ( ) Applet是一种特殊的Panel,它...

Global site tag (gtag.js) - Google Analytics