package net.xxt;
/**
* 测试JAVA参数传递是值传递还是引用传递
* @author zhaoguoli
* @version v1.0 2009-07-02 晚11点 create
*/
public class ParamPass {
/*
* 8个基本类型 ,传值-----不改变
*/
public void change(int a){
a = 5;
}
/*
* 类,传值,但值是内存中一个对象的地址-----改变
*/
public void change(Person p){
p.age = 22;
p.sex = 1;
}
/*
* 类,传值,但字符串是常量,一旦赋值就不会改变 -----不变
*/
public void change(String str){
str = "123";
}
/*
* 数组是对象,传值------改变
*/
public void change(int[] array){
for (int i = 0; i < array.length; i++) {
array[i] = i;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ParamPass test = new ParamPass();
/*
* 原生数据类型
* 在栈中分配内存,存放a = 1
* 在参数传递中,将1赋于了另外一个栈中的变量(形参),两者互不影响
*/
int a = 1;
test.change(a);
System.out.println(a);
/*
* 类对象Person
* 先在堆中分配空间,调用构造函数
* 然后将堆中的分配空间的首地址赋于栈中的P
* 在参数传递中,将栈中P的值,也就是堆中分配空间的首地址赋于另外一个栈中的变量(形参)
* 由于两者指向同一个地址,所以两者互相影响
*/
Person p = new Person(12,11);
test.change(p);
System.out.println(p.age);
System.out.println(p.sex);
/*
* 字符串"abc"在堆中分配空间
* 然后将堆中的分配空间的首地址赋于栈中的str
* 在参数传递中,将栈中str的值,也就是堆中分配空间的首地址赋于另外一个栈中的变量(形参str)
* 在方法中:(形参str)重新执行了上面三步:即(形参str)指向了堆中的另外一个首地址,两者指向的已经不是同一个地址
* 所以两者互不影响
*/
String str = "abc";
test.change(str);
System.out.println(str);
/*
* 数组的分析相对比较复杂:相当于一个容器,可参考Person
*/
int[] array = {9,8,7,6,5,4,3,2,1};
// int[] arr = new int[9]; // 从new 可以看出是在堆中
// for (int i = 0; i < arr.length; i++) {
// arr[i] = 9 - i;
// }
// System.out.println(arr.toString());
test.change(array);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
class Person {
int age ;
int sex;
public Person(int age, int sex) {
this.age = age;
this.sex = sex;
}
}
//
//输出结果为:
//1
//22
//1
//abc
//0
//1
//2
//3
//4
//5
//6
//7
//8
//
//结论:
//1.java 方法参数传递一律是传值
//2.字符串是常量,一量更改就不能再改变其值
//3.数组是对象
分享到:
相关推荐
Java 方法参数传递是 Java 编程语言中的一种基本机制,在方法调用时将参数传递给方法体内的变量,但是在传递过程中,参数的类型会对传递结果产生影响。在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 ...
在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点并非完全对立,而是根据不同的角度来描述Java中的参数传递...
Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天,我们将讨论如何在 Lotus Domino Java ...
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
虽然看起来像是“引用传递”,但实际上是“值传递”的一种特殊形式,通常称为“对象引用的值传递”。这意味着传递的是对象引用(内存地址)的一个副本,而不是对象本身。因此,如果在方法内部修改对象的属性,原始...
在IT领域,Java是一种广泛使用的编程语言,而Shell脚本则是在Linux环境下广泛使用的一种命令语言和脚本解释器。在某些情况下,Java程序需要调用Shell脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类的情况下,动态地获取类的信息并调用其方法。这篇博客文章...
Java中,无论是值类型还是引用类型,在作为方法参数传递时,都遵循着一种被称为“按值传递”的机制。这意味着,当我们将一个变量作为参数传递给方法时,实际上传递的是该变量的一个副本。 ##### 1. 值传递 - **原理...
Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递中,函数或方法接收的是原始数据类型(如int、double、boolean)参数的副本。例如,如果有一个方法...
在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。Xfire是一款曾经流行的开源Java框架,用于构建和消费Web服务。在本文中,我们将深入探讨Xfire调用Web服务时遇到的参数传递问题...
尽管如此,有一种特殊情况值得注意,那就是Java中的`String`类型。虽然`String`是引用类型,但由于它的不可变性,即使通过引用传递,也不能直接修改已创建的`String`对象。例如: ```java void modifyString(String...
以下是对这两种传递方式的详细解释。 1. 按值传递 按值传递是指在函数调用时,实际传递的是参数变量的副本,而不是原始变量本身。这意味着在函数内部对参数的修改不会影响到函数外部的变量。以下是一个简单的例子...
`OUT`参数是存储过程中的一种特殊参数类型,用于将结果传出存储过程,供调用者使用。 Java中调用存储过程主要通过JDBC(Java Database Connectivity)接口实现。以下是一步步的操作步骤: 1. **加载数据库驱动**:...
在调用使用了可变参数的方法时,可以不写参数,即传入空参;可以直接在里边写入参数,参数间用逗号隔开;可以传入一个数组。 以下是 Java 可变参数的实例代码: ```java public class Test { public static void ...
保留字`byvalue`在Java中未被实现,这可能是Java开发者对值传递概念的一种潜在支持,因为如果使用`byvalue`,则意味着传递对象的完全拷贝,这在处理大型对象时可能会导致性能问题。 总的来说,Java的参数传递既可以...
当传递一个对象作为参数时,实际上是传递对象引用的副本。因此,尽管方法内部和外部的变量名可能相同,它们实际上指向同一个堆内存中的对象。 例如,在上述例子中,`main`方法中的`a`和`test1`方法中的`a`都是指向...
在Java编程中,参数传递是方法调用的核心机制,它决定了方法内部如何处理传递过来的值。Java有两类数据类型:基本数据类型(如int、char、boolean等)和对象类型。这两种类型的参数传递方式有所不同。 对于基本数据...
* 按值调用:Java方法参数传递采用按值调用的方式,方法得到的是所有参数的一个拷贝。 * 不可修改实际参数:方法内部的逻辑操作不会影响外部的实际参数变量的值。 * 对象引用传递:如果方法的参数是对象的引用,这就...
当我们将基本数据类型作为参数传递给方法时,实际上是传递了该数据的值的一个副本。这意味着方法内部对参数的修改不会影响到原始数据。例如: ```java public class ValuePassExample { public static void main...
在Java中,参数传递主要有两种方式:值传递(Value Passing)和引用传递(Reference Passing)。虽然Java官方文档并未明确提及引用传递,但Java中的对象实际上是以引用的方式进行传递。 首先,我们来看基本类型(如...