java中的参数传递

简介:
这到底是怎样一个问题呢?还是用例子说明吧:
public class Parameter{
    static void aMethod(){
        int a=1;                         //定义一个int a
        change(a);
        System.out.println(a);
    }
    static void change(int a){           //将传入的a加1
        a++;
    }
    public static void main(String[] args){
        aMethod();                        //执行并输出
    }
}
猜猜程序的输出会是什么呢?1还是2?结果是1。为什么呢?
    因为a是int 数据,所以作为参数传递的时候,a并没真正传入change(a).传入的是a的一个副本。所以change不管怎么对a进行处理都不会改变aMethod中a的值。
那么有没有办法通过外部的一个方法改变另一个方法里的值呢?当然有,只要使用对象的引用也叫句柄。说起来文绉绉的倒不如举个例子:
import java.util.*;                      //LinkedList要用到这个包
public class Parameter{
    static void aMethod(){
        LinkedList a = new LinkedList();  //生成一个LinkedList a对象
        a.add("a");
        change(a);
        for(int i=0;i<a.size();i++){      //将链表中所有数据输出
            System.out.println(a.get(i).toString());
        }
    }
    static void change(LinkedList a){     //将传入的a加1
        a.add("b");                       //为a中再添加一个b
    }
    public static void main(String[] args){
        aMethod();                        //执行并输出
    }
}
输出的结果是:
a
b
    这说明了什么?说明change(LinkedList a)方法已经改变了a中的值。那么为什么a是对象就可以改变呢?我们将a传入change方法的时候传入的不是某个对象,而是这个对象的引用(或者叫做句 柄)插入一句,什么是句柄?比如你,作为一个人,是一个对象,引用(句柄)就是你的身份证号码。当我们把引用作为参数传入方法的时候,引用同样也进行了复 制,但复制后的引用指向同一个对象,所以change()里对a 的改变其实也就是对aMethod()里a的改变,因为他们是同一个对象!
    是不是说只要是对象就可以了呢?不一定!
    比如String类型的数据,即使你这样生成一个String a对象
                    String a = new String("go to hell");
a的确是一个对象,但是在a的引用复制的时候,原来的对象也会丢失。其实String 类型的数据在每次改变应用的时候都会清楚原来的对象。
比如在你这么使用的时候:
                    String a="you";//第一行
                 a=a+"are fool";//第二行
第一行的a和第二行的a所代表的是完全不同的对象。所以说如果程序里要对String进行大量改变的时候建议不要使用String,如果不小心使用了,你的程序将莫名其妙地占用大量的内存。不用String用什么?用StringBuffer!



本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/132579,如需转载请自行联系原作者
目录
相关文章
|
存储 Java 编译器
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
296 0
|
7月前
|
人工智能 Java
Java参数传递分析
本文详细探讨了Java中参数传递的机制,明确指出Java采用的是值传递而非引用传递。通过基本数据类型(如int)和引用类型(如Map、自定义对象People)的实例测试,证明方法内部对参数的修改不会影响原始变量。即使在涉及赋值返回的操作中,表面上看似引用传递,实际仍是值传递的结果。文中结合代码示例与执行结果,深入解析了值传递的本质及容易引起混淆的情形,帮助读者准确理解Java参数传递的核心概念。
137 7
|
存储 安全 Java
在 Java 中如何将 ArrayList 作为参数传递
【8月更文挑战第23天】
666 0
|
Java Spring
【Java】Spring boot快速上手(二):参数传递
【Java】Spring boot快速上手(二):参数传递
293 0
|
Java 编译器
滚雪球学Java(34):探究Java方法的神奇魔法和参数传递奥秘
【5月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
101 1
滚雪球学Java(34):探究Java方法的神奇魔法和参数传递奥秘
|
数据采集 Java 数据安全/隐私保护
使用Java进行网络采集:代理IP与参数传递详解
Java参数传递是按值传递,包括对象引用的值。当传递对象时,方法内部修改对象内容会影响原始对象,但不能改变原始引用。示例展示了如何在爬虫代理中使用此机制,通过`ProxySettings`类传递代理信息,方法内可访问但不能更改原始对象。理解这一机制对编写高效无错的Java代码至关重要。
140 0
使用Java进行网络采集:代理IP与参数传递详解
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
140 0
|
Java
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
192 0
|
Java
第一季:4方法的参数传递机制【Java面试题】
第一季:4方法的参数传递机制【Java面试题】
182 0
Java 参数传递到底是按 值传递 还是 引用传递
首先明确,Java 中方法参数传递方式是按值传递。对于基本类型(int a, long b),参数传递时传递的是值,例如 int a = 5,传递的就是 5。如果是引用类型,传递是指向具体对象内存地址的地址值
Java 参数传递到底是按 值传递 还是 引用传递