`

java调用方法传递参数只有一种值传递

    博客分类:
  • java
阅读更多
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可变参数(Varargs)是一种语言特性,允许方法接受可变数量的参数。在方法声明中使用省略号(...) 表示,可以将不定数量的参数传递给方法。可变参数使得方法更加灵活,可以接受任意数量的参数,并以数组形式访问...

    JAVA +jni c# 参数传递.rar

    JNI是java调用C++程序的一种实现方法,网上有一些相关的资料,但不一定能适用,这个文档我在学习JNI时综合网上资料总结的,本人亲测能够实现,希望下载的网友有什么问题多多反馈,希望对学习JNI的朋友有所帮助

    Java怎么在函数内改变传入的值

     函数调用时,参数传递的方式主要有两种: 值传递和引用传递。  Java使用的是值传递。值传递是把变量的值、常数或常量传递给参数。而引用传递,是把变量的所在内存中的地址传递给参数,参数通过地址找

    java中方法参数的一些总结

    也是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何基本数据类  方法参数共有两种类型:  1、基本数据类型(数字、布尔值)。  2、对象引用。  一个方法不可能修改一个基本...

    java的传值与传引用详解

     Java 中,改变参数的值有两种情况,第一种,使用赋值号“=”直接进行赋值使其改变,如例 1 和例 4;第二种,对于某些对象的引用,通过一定途径对其成员数据进行改变,如例 3。对于第一种情况,其改变不会影响到...

    Java传参方式-值传递还是引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖“按引用传递”这一行为而导致的...

    java的类别方法(格式:PPT 字体:繁体)

    因为printMsg()方法没有传回值和参数列,所以呼叫方法只需使用方法名称加上空括号,如下所示: printMsg(); 上述呼叫的方法因为在同一个类别,所以省略类别名称,如果是在其他类别呼叫此类别方法,例如:public修饰子的add2...

    Java多线程Callable接口

    在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从方法call()中返回的值,并且必须使用ExecutorService.submit()方法调用它。 import java.util.ArrayList; import java.util....

    JAVA面试题最全集

    35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有...

    java五种jsp页面跳转方法详解

    java五种jsp页面跳转方法详解 2009-08-21 09:06 1. RequestDispatcher.forward()  是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到 另外一个Servlet,JSP 或普通HTML...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    Java与C语言混合开发技术

    Java与C语言混合开发是一种强大的编程技术,它结合了Java的跨平台性和C语言的高执行效率。通过JNI(Java Native Interface)技术,可以在Java代码中调用本地方法(Native Method),实现更高效、更灵活的程序设计。...

    Day04-Java方法(内含值传递的解释!)

    Java方法(内含值传递的解释!) 1 何谓方法 System.out.println()我们一直在用,其意思为调用系统类中out对象的println()方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 ...

    Java面试宝典(基础篇).docx

    调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。 (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载...

    一种实现Java和C通信的方法.pdf

    选择java和C两种语言分别实现上层软件和底层软件的编程,通过JNI技术在java中调用C实现java和C通信,并采用对象封装的方法解决复杂输入参数传递的问题。在一项目中进行了成功的应用,并详细描述了实现过程。

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    对象中,所以,访问对象中的数据只有一种途径,那就是利用一个公开的接口。 实际上,封装在程序和数据之间设置了一道栅栏,它可以阻止一部分的设计错误,不至 于涉足应用程序其他部分的数据。 2.2.3 消息 ...

    java全局异常统一处理

    在Java异常处理机制中,当一个方法抛出异常时,该异常将被传递到调用该方法的方法中,直到找到能够处理该异常的代码为止。在这个过程中,Java使用了try-catch语句块来捕获和处理异常。通过在一个或多个catch语句块中...

    Java精华(免费版)

    而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。   checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出...

    Java利用接口实现回调

    在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。  熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...

    疯狂JAVA讲义

    学生提问:能不能只分配内存空间,不赋初始值呢?89 4.5.4 使用数组 90 学生提问:为什么要我记住这些异常信息? 91 4.5.5 JDK1.5提供了foreach循环 91 4.6 深入数组 93 4.6.1 内存中的数组 93 学生提问:为...

Global site tag (gtag.js) - Google Analytics