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不能混 ...
随机推荐
- java-输出格式
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html Formatting Numeric Print Output ...
- word2vec代码解释
以前看的国外的一篇文章,用代码解释word2vec训练过程,觉得写的不错,转过来了 原文链接 http://nbviewer.jupyter.org/github/dolaameng/tutorial ...
- NET Core,跨平台的轻量级RPC
NET Core,跨平台的轻量级RPC:Rabbit.Rpc 特性一览 Apache License 2.0协议开源 支持客户端负载均衡(提供了轮询.随机算法的实现) 支持ZooKeeper和文件共享 ...
- javascript模块加载框架seajs详解
SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加载).SeaJS可以和jQuery完美集成,使用 ...
- 转: ajax跨域之JSONP
事件背景: 某个站点分为静态产品介绍页面(或由于某原因需要静态化),和一个独立的在线应用程序.静态产品页面属于www.a.com下,而在线应用程序作为一个相对独立的系统存在于app.a.com上. 在 ...
- 安装CDH
Cloudera Manager 4.8.2 http://www.idefs.com/recordsubuntu-12-04-cloudera-installation-manager-4-8-2- ...
- Runtime.getRuntime().exec(...)使用方法
Runtime.getRuntime().exec(...)使用方法 如果想要了解更多的信息,参阅代码里面给的链接 下面是这个正确的例子 public class RuntimeExec { /** ...
- HNOI2016 网络
题目 朴素算法 在线. 树链剖分套一个堆. 时间复杂度\(O(n (\log n)^3)\). 分治 朴素算法中,套一个堆是为了支持删除操作. 采用以下分治可以避免删除操作: 每次对时间\([l,r] ...
- javascript使用消息框
之前很多地方都用过alert,它的作用是弹出一个警告框,我们调用的方法是alert("输入的内容");其实更正确的写法是 window.alert("输入的内容" ...
- MVC自定义AuthorizeAttribute实现权限管理
[转]MVC自定义AuthorizeAttribute实现权限管理 原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html 网站的权 ...