在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++的区别的更多相关文章

  1. @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法

    JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...

  2. 比较C++、Java、Delphi声明类对象时候的相关语法

    同学们在学习的时候经常会遇到一些问题,C++.Java.Delphi他们到底有什么不一样的呢?今天我们来比较C++.Java.Delphi声明类对象时候的相关语法.希望对大家有帮助! C++中创建对象 ...

  3. idea java方法中 传多个参数对象 的复制粘贴快速处理方法

    比如像这种的传多个参数对象,我是直接复制过来,然后把第一个字母改成大写,然后后面的实例对象敲一个第一个字符的小写,回车就直接出来了 在写调用参数的地方,ctrl+p 调出提示,然后按下提示里的实例的第 ...

  4. Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)

    通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...

  5. php 数组 类对象 值传递 引用传递 区别

    一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...

  6. [转载]php 数组 类对象 值传递 引用传递 区别

    一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...

  7. 多线程——Java中继承Thread类与实现Runnable接口的区别

    线程我只写过继承Thread类的,后来知道java多线程有三种方式,今天首先比较一下常用的继承Thread类和实现Runnable接口的区别. 按着Ctrl键进入Thread之后,发现Thread类也 ...

  8. springmvc关于前台日期作为实体类对象参数类型转换错误

    页面报错: 后台错误: Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [ty ...

  9. jpa @Query()参数设置,:冒号方式、?NO.问号方式、实体类对象参数设置

    一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x  和:XX不能混 ...

随机推荐

  1. FFTW程序Demo

    #include<stdio.h> #include<stdlib.h> #include <fftw3.h> #include<string.h> # ...

  2. OC-nonatomic和atomic相关

    1.原子和非原子属性1.1>OC在定义属性时又nonatomic和atomic两种选择(1)atomic:原子属性,为setter方法加锁(默认就是atomic)(2)nonatomic:非原子 ...

  3. table中的换行问题

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. 织梦dedeCMS|系统基本配置标签

    站点根网址:    {dede:global.cfg_basehost/}调出网站的名称:   {dede:field.title/}-{dede:global.cfg_webname/}    网站 ...

  5. 用jmeter进行多用户并发压力测试 [转]

    近日manager要求对项目进行压力测试,开始对jmeter进行了研究.jmeter是Apache一个开源项目,可对各种项目进行测试,甚至包括junit. 测试要求如下,多用户同时登陆web应用程序, ...

  6. Hbase split的过程以及解发条件

    一.Split触发条件   1.  有任一一个Hfile的大小超过默认值10G时,都会进行split    2.  达到这个值不在拆分,默认为int_max,不进行拆分       3.compact ...

  7. Python之路:Python简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...

  8. VC之美化界面(内容覆盖十分全面,经典)

    界面美化 摘要本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理: 2. 熟悉Windows消息机制,熟悉MFC的消息映射和 ...

  9. leetcode第一刷_Set Matrix Zeroes

    这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...

  10. javascript实现贪吃蛇

    <html> <head> <style> body { background:#444; } .rect { border:1px solid #94F; wid ...