java-JAVA中函数的参数值的传递问题

问题描述

JAVA中函数的参数值的传递问题

在学习java中,遇到这样一个问题
class PasasVale{
public static void main(String [] args){
int x = 5;
change(x);
System.out.println(x);
public static void public change(int y){
y =3;
}
}
}
输出结果为5;
还有一个例子
class PasasVale{
public static void main(String [] args){
PassVale obj = PassVale();
obj.x = 5;
change(obj);
System.out.println(x);
public static void public chang(obj){
obj. y =3;
}
}
}
输出结果为3
也就是说结果被更改了
在分析里是这样说的,第一个例子,刚开始,main中的值为5,然后change中的值未定,然后传值,两个都为5,然后在change中修改了值为3,然后原来main中的值还是5,所以输出来为5
第二个例子,是引用了堆和栈的概念,说原来在栈中main中obj中存一个地址,然后指向堆内存中的5,这时,change值未定,然后又传值,这时change中却传的是地址,也指向了堆中的这个5,然后修改,然后就变了
我不明白的是为什么第一个例子里没有这麽做。第二个却在堆栈中操作了,难道两个例子的修改值不在一个层面上吗,求解答,谢谢

解决方案

第一次,你做的工作基本是这样:你有一根线,线的名字叫x,线的尽头绑着一个数字,数字是5,。你呢叫来一个人,把5给他了。他呢拿了一根线,线的名字叫y,他把这根线绑在了5上。然后他从兜里掏出一个数字,3。然后把他那根叫y的线解开了,重新绑到了3上。然后他跟你说完事了。你一拉你得线,拉出来的还是5。
第二次,你还是有一根线,名字叫obj。这个obj是个盒子,盒子里有一个线,叫x。绑着5。你又把他给人了,那人也用一个叫obj的线绑盒子上(虽然名字相同,单并不是同一根线)然后他一拉线拿出盒子来,盒子里不是有根线x么,他解开,绑了一个3上去。然后告诉你完事了。你一拉你得线,拿到一个盒子,再拉盒子里的线,拿到的就是3了。

解决方案二:

第二次,你得obj绑着一个盒子,- - 写着写着就飞了……

解决方案三:

参数值的传递不是函数的任务!

解决方案四:

解决方案五:

第一问。
int x = 5;
change(x);将参数x(引用地址),而不是值5,传递到这个方法中。
x改头换面,摇身一变化妆成y,在这个方法中。将5这个值赋给y,也就是赋给了x。
只是画了一下妆。

第二问。
传进来的是一个对象。这个对象.x,对象.y 是两个不同的参数,改变x 当然不会影响y,反之亦然。

时间: 2024-10-25 12:36:40

java-JAVA中函数的参数值的传递问题的相关文章

java中的引用传递-Integer 对象在函数之间的引用传递起不到全局的作用

问题描述 Integer 对象在函数之间的引用传递起不到全局的作用 //实现排序二叉树的第k个节点的查找 TreeNode target = KthNode(p2); public static TreeNode KthNode(TreeNode pRoot int k) { if(pRoot == null || k < 1 ){ return null; } //ArrayList<Integer> list = new ArrayList<Integer>(); //l

Java中函数参数传递和数据存储

值传递是将要传递的值作为一副本传递的..引用传递,传递的是引用对象的内存地址..例如: int i=4;  int j=i;   //相当于把4复制了一个副本赋给了j 输出结果是i=4 ,j=4 Cint *p,*p1;int j=5;p=j;    //这里是把j在内存当中的地址赋给了指针pp1=p;   //这里是把指针p中保存的地址(就是j的地址)赋给了指针p1 j=4;    //这里改变j的值 输出结果是  j=4  ,  *p=4  ,  *p1=4  //因为p和p1指向的都是j

java-关于Java方法中数组传递的问题

问题描述 关于Java方法中数组传递的问题 public class TestArrayMethod { public static void main(String [] args) { int score[]={1,5,7,2,3,9,4,6,8}; getMax(score); arraySort(score); public static void getMax(int arr[]) { int temp=arr[0]; for(int i=0;i<arr.length;i++) { i

java 中函数的参数传递详细介绍_java

 java中函数的参数传递 总结:   1.将对象(对象的引用)作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的对象.   2.当将基本类型或基本类型的包装集作为参数传递时,传递的是值.也就是说函数内对参数所做的修改不会影响原来的变量.   3.数组(数组引用))作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的数组.   4.String类型(引用)作为参数传递时传递的是引用,只是对String做出任何修改时有一个新的Str

Java语言入门教程(九):Java语言中的值传递

在第八篇博文中,介绍了编写方法体必须了解的基本知识点,初学者已经可 以自己写简单的例子进行练习.在练习过程中,我们不可能把所有的代码都放在 main方法中,Java类一定会有或多或少的方法成员,调用这些方法将是必要的步 骤.而调用方法成员时,如果该方法有参数,就必须要传递实际参数给方法的形 式参数.所以了解Java语言中的值传递是非常必要的. Java中的数据类型分两种,基本数据类型和引用类型.所以本文中也将分别 对这两种数据类型的值传递特征进行介绍. 1.基本数据类型的值传递:基本数据类型传递

properties load函数-Ecalipse java ee中的Properties 对象没有load函数

问题描述 Ecalipse java ee中的Properties 对象没有load函数 各位前辈,我在最近在学到Properties对象的时候遇到一个怪问题 public void test11(){ ServletContext sc=this.getServletContext(); String path=sc.getRealPath("/WEB-INF/classes/p2.properties"); Properties p=new Properties(); p.load

《Java程序员面试秘笈》—— 面试题8 在Java中,对象是如何传递消息的

面试题8 在Java中,对象是如何传递消息的 请选择一个正确答案. (a)对象通过彼此的变量来传递消息. (b)对象通过修改彼此类的静态变量来传递消息. (c)对象通过调用彼此的实例方法来传递消息. (d)对象通过调用彼此类的静态方法来传递消息. 考点:考察求职者对于对象传递消息的理解. 出现频率: 面试题解析Java对象之间的消息传递,是通过调用相互的实例方法来实现的,而不是静态方法. 参考答案:(c). 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的

第三讲 Java语言中的面向对象特性

对象 [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点: 1. 理解方法重载和方法重写,不要混淆了两者的使用. 2. 类变量和类方法的使用. 3. 接口的使用.3.1 面向对象技术基础 3.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类

转:java.util中的Date类

java.util中的Date类 www.linuxaid.com.cn 01-09-20 23:03 496p 处处--------------------------------------------------------------------------------     在JSP中,我们经常要处理有关日期和时间的信息,这时候你可以使用java.util中的Date类,在编写Java源程序时,情况很明显,你必须通过"import java.util.*"引入java.ut