zoukankan      html  css  js  c++  java
  • Java方法参数

    Java方法参数

    在程序设计语言中如何将参数传给方法(或函数):

    1. 按值调用:方法接受的是调用者提供的值
    2. 按引用调用:方法接受的是调用者提供的地址

    Java程序设计语言总是采用按值调用(方法得到的是所有参数值的一个副本)

    public static void main(String [] args)
        {
            int x1=6;
            add(x1);
            System.out.println(x1);
    
        }
        public static void add(int x)
        {
            x=x+x;
        }
    

    调用add()方法后,x1值还是6,并没有改变,具体流程:

    • x初始化为x1值的一个副本
    • x加上自己后为12,但是x1的并没有改变
    • 方法结束后,参数变量x不再使用

    如果传入的是对象引用,很容易改变x1的值

        int x1=6;
        public static void main(String [] args)
        {
    
            Test test=new Test();
            test.add(test);
            System.out.println(test.x1);
    
        }
        public  void add(Test x)
        {
            x.x1=x.x1+x.x1;
        }
    

    具体步骤是:

    • x初始化test对象变量的一个副本,两个对象变量都指向同一类
    • add()利用x参数变量,调用x1参数完成操作
    • 方法结束后,x不在使用,对象变量test继续引用那个对象

    但是Java并不是按引用调用

        int x1;
        public static void main(String [] args)
        {
    
            Test test=new Test(0);
            Test test1=new Test(1);
            test.swap(test,test1);
            System.out.println(test.x1);
            System.out.println(test1.x1);
    
        }
        public Test( int x1)
        {
            this.x1=x1;
        }
        public  void swap(Test x,Test y)
        {
            Test temp=x;
            x=y;
            y=x;
        }
    

    我们发现输出还是0,1,对象并没有发生交换,因为x,y分别是对象变量test,test1的副本,方法执行时只完成x,y副本的交换,方法执行结束后,x,y变量不再使用,test,test1还是指向对象并没有改变。

    Java对象引用其实是按值传递。

    总结:

    1. 方法不能修改基本数据类型的参数(即数值型或布尔型)
    2. 方法可以改变对象参数的状态
    3. 方法不能让一个对象参数引用一个新的对象

    在c++中可以用&实现按引用调用,&符号相当于取地址的意思。例void swap(Test &x,Test&y)

  • 相关阅读:
    hdu 1251(字典树)(3种方法)
    HDU 2203(KMP算法)
    九度oj 题目1335:闯迷宫
    poj3894 bfs+记录路径
    状压dp--P2704
    状压dp--洛谷P2622
    动态规划--牛客多校number
    完全背包
    01背包--hdu
    莫比乌斯反演模板--Gym 101982B
  • 原文地址:https://www.cnblogs.com/cwstd/p/13983710.html
Copyright © 2011-2022 走看看