`

关于java中是地址传递还是值传递的测试

 
阅读更多

首先,我的结论是,如果是对对象进行 操作的话,传的是地址,如果是对基本数据类型进行操作的话,传的是值!

下面,我再用一个小的实例来测试我的结论:


class Person {
	int age;
	
	public void setAge(int age){
		this.age = age;
	}
	
	public int getAge(){
		return age;
	}
}

public class Test{
	public static void main(String[] args){
		Person p = new Person();
		p.setAge(1);
		changeObj(p);
		System.out.println(p.getAge());
		
		int a =  1;
		change(a);
		System.out.println(a);
	}
	
	static void changeObj(Person p){
		p.setAge(12);
	}
	
	static void change(int a){
		a = 123;
	}
}

如果,我上面的结论是猜测是正确的话,输出的结果应该是
age=12
a=1

 

下面截图表示一下:

因此,说明了我的结论是正确的。可是突然想到,如果是基本数据类型的包装类的话会是什么结果呢?下面我们进行一个小的测试来寻找一下结论

 

public class Test{
	public static void main(String[] args){
		Integer b = new Integer(90);
		change(b);
		System.out.println(b);
	}
	
	static void change(int a){
		a = 123;
	}
}

如果是值传递的话,那么结果应该是90,如果是地址传递的话,那么结果应该是123,下面贴图说明问题:

 



上面说明了传递的是值,而不是地址,但是有一点,程序里面,change()方法这的参数是int,而不是Integer,这会不会影响结果呢?那么我们就再写一个例子测试,看一下结果:

 

public class Test{
	public static void main(String[] args){
		Integer b = new Integer(90);
		change(b);
		System.out.println(b);
	}
	
	static void change(Integer a){
		a = 123;
	}
}


下面来看结果,还是贴图查看:

 


可以看出,结果依然没有变化,由此我们可以得到结论:基本数据类型,包括其包装类,在进行参数传递的时候传的是值。


综上所述,我们可以得到结论:在java中进行参数传递的时候,基本数据类型,包括其封装类,进行的是值传递,而对于对象,传递的是引用。


以上是本人的一个测试与结论,如果大家发现有什么不正确的地方,欢迎批评指正。





分享到:
评论

相关推荐

    RabbitMQ Java测试客户端

    总结一下,这个“RabbitMQ Java测试客户端”项目是一个实践示例,展示了如何在Java应用程序中使用RabbitMQ进行消息传递。它涵盖了连接管理、消息发送与接收的基本流程,对于学习和理解RabbitMQ在Java环境下的应用...

    Java中函数是值传递还是引用传递?

    有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解  先看一个例子 public class Test1 { public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("main...

    JNI中C和Java参数传递详细例子

    ### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...

    java中参数传递方式详解

    本文意在终结这个话题,Java 中有说法:Java 里面参数传递都是按值传递,怎么理解这句话? 按值传递和按引用传递是来自 C++ 语言的概念。引用不是汉语词典中的一个词,而是 C++ 的概念——“&”这个符号。为什么有...

    url传递的参数值中包含&时,url自动截断问题的解决方法

    java代码中做如下测试: String charEncode = java.net.URLEncoder.encode(“&”); System.out.println(“字符& 转译后的值为:” + charEncode ); //输出:& 所以,解决方法出现了—在传送参数前, 将&全部替换为...

    LR中使用Java Vuser测试Java类功能

    - 源码:在Java Vuser测试中,测试者需要理解和操作Java源代码,以便能够精确地模拟应用程序的行为。 - 工具:LoadRunner作为主要的工具,提供了VuGen和Controller等组件,帮助测试人员编写、运行和分析Java Vuser...

    java调用matlab测试源码

    至于压缩包中的`META-INF`和`showimg`,`META-INF`是一个标准的Java存档(JAR)文件目录,通常包含关于JAR文件元数据的信息,比如清单文件(MANIFEST.MF),这在Java类库或应用程序的打包和运行中很重要。...

    方法的参数传递机制测试类

    方法的参数传递机制测试类,以供大家交流之用。

    java单元测试包

    JUnit 4.7是该框架的一个早期稳定版本,它引入了一些改进,比如更灵活的测试异常处理,支持参数化测试,以及允许在测试中使用可选的注解。4.8版本进一步增强了对注解的支持,包括修复了一些bug和改进了性能。而4.11...

    jsonjava 源码和测试文件

    在测试文件中,你可能还会看到一些关于异常处理的示例,比如当试图访问不存在的键或尝试将非JSON兼容类型转化为JSON时,程序会抛出`JSONException`。这有助于确保数据的正确性和完整性。 总的来说,`jsonjava`库是...

    测试activeMQ的java程序

    在Java编程中,ActiveMQ提供了API,使得开发者能够轻松地将消息传递功能集成到应用程序中。 首先,我们要理解JMS(Java Message Service)。JMS是一种标准接口,定义了生产、发送、接收和消费消息的一套API,这些...

    Java 技能测试题

    Java 技能测试题主要涵盖了三个核心领域:线程、Socket和I/O以及算法和数据库操作。这些知识点在Java编程中至关重要,对于软件工程师的角色尤其重要。以下是对这些知识点的详细解释: 1. **线程**: 线程是程序中...

    Mongodb的并发访问性能测试的java客户端

    在并发性能测试中,通常会使用线程池(如`ExecutorService`)来启动多个并发线程,每个线程执行不同的数据库操作。测试的目标是评估在高并发环境下,MongoDB的响应时间、吞吐量以及系统资源的使用情况。这有助于了解...

    一款最好用的Java RESTful 接口测试工具

    在IT行业中,测试是开发流程中的重要环节,尤其是对于API接口的测试,它能确保服务的质量和稳定性。本文将深入探讨“一款最好用的Java RESTful接口测试工具”——RESTClient,以及它如何帮助开发者提高测试效率。 ...

    Java小小测试例题-计算器

    总结来说,这个"Java小小测试例题-计算器"涵盖了Java Web开发中的基础概念和技术,包括SSH框架的使用、MVC架构的理解、以及简单的业务逻辑实现。对于初学者,这是一个很好的实践项目,可以帮助他们理解Java企业级...

    javadbf-0.4.0,中文乱码解决及测试中文输出代码

    在标题和描述中提到的问题,主要是关于在使用javadbf处理中文数据时遇到的乱码问题以及如何解决这个问题。中文乱码通常发生在字符编码不匹配的情况下,例如当文件以一种编码存储,但程序试图以另一种不同的编码读取...

Global site tag (gtag.js) - Google Analytics