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之等号、传类对象参数与c++的区别的更多相关文章
- @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法
JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...
- 比较C++、Java、Delphi声明类对象时候的相关语法
同学们在学习的时候经常会遇到一些问题,C++.Java.Delphi他们到底有什么不一样的呢?今天我们来比较C++.Java.Delphi声明类对象时候的相关语法.希望对大家有帮助! C++中创建对象 ...
- idea java方法中 传多个参数对象 的复制粘贴快速处理方法
比如像这种的传多个参数对象,我是直接复制过来,然后把第一个字母改成大写,然后后面的实例对象敲一个第一个字符的小写,回车就直接出来了 在写调用参数的地方,ctrl+p 调出提示,然后按下提示里的实例的第 ...
- Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)
通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...
- php 数组 类对象 值传递 引用传递 区别
一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...
- [转载]php 数组 类对象 值传递 引用传递 区别
一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...
- 多线程——Java中继承Thread类与实现Runnable接口的区别
线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...
- springmvc关于前台日期作为实体类对象参数类型转换错误
页面报错: 后台错误: Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [ty ...
- jpa @Query()参数设置,:冒号方式、?NO.问号方式、实体类对象参数设置
一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x 和:XX不能混 ...
随机推荐
- IOS开发之格式化日期时间的使用 && 编程中常见问题
今天在做一个有关时间的一些开发的时候,遇见了一写问题,反正来说既是很简单的问题,但毕竟用了我一些时间去调错误,遂记录之. 本来是想用 NSDateFormat 来转换一下服务器返回的时间,然后在客户端 ...
- js得到分页栏
自己写的,感觉返回html代码蠢蠢的,但是新手并不知道怎么写更好的,感觉这样子也蛮简单.记录下来,以后来越改越好. //获得分页栏.注意indexSize为奇数,这样也比较好看 //totalNum: ...
- 前端CSS规范大全
一.文件规范 1.文件均归档至约定的目录中(具体要求以豆瓣的CSS规范为例进行讲解): 所有的CSS分为两大类:通用类和业务类.通用的CSS文件,放在如下目录中: 基本样式库 /css/core 通用 ...
- 关于hibernate子查询参数的问题
private Map<String, Object> createWblHqlContext(boolean needGroup, String startDate, String en ...
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- QProcess与外部程序的调用(可以通过设置管道来交互)
项目做到一定阶段,经常需要在原来的工程上调用外部程序.Qt为此提供了QProcess类,QProcess可用于完成启动外部程序,并与之交互通信. 一.启动外部程序的两种方式:(1)一体式:void Q ...
- spring Annotation 笔记2.1
使用注解替代xml 在前几章的笔记基础上添加使用注解的形式 1.配置applicationContext 添加context schema <?xml version="1.0&quo ...
- IT第五天 - 循环的使用、本周总结 ★★★
IT第五天 上午 循环 1.while循环.do-while循环.switch语句块的使用 下午 编程 1.编程注释的编写 2.编程力求代码的精简,算法的优化 3.变量的优化使用 小项目 1.swit ...
- Axure滚动效果实现
下面的这个透明区域用于显示滚动效果,它本身是一个处于隐藏状态的动态面板,它里面也放了一个动态面板用于产生移动的效果 里面的动态面板起名“实际内容”,注意它的默认状态是“状态2”,状态2和状态一的内容一 ...
- PHPCMS V9.3.2用户注册模板中的一个低级Bug
当我们下载了目前最新的PHPCMS的时候,如果我们修改了用户注册的模板,那么模板缓存就会更新,这时候就会如下 的问题: Parse error: syntax error, unexpected T_ ...