• JAVA基本数据类型、引用数据类型-参数传递详解


    1:基本类型的参数传值

    对于基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。实参的精度级别应等于或低于形参的精度级别,否则报错。

    class JB{
        void f(int x, int y){
            x=x+1;
            y=y+1;
            System.out.printf("参数x和y的值分别是:%d, %d
    ", x, y);
        }
    }
    public class CS {
        public static void main(String[] arg){
            int x=10;
            int y=12;
            JB jb=new JB();
            jb.f(x, y);  
            System.out.printf("main方法中x和y的值分别是:%d, %d
    ", x, y);
        }
    }
    结果:
    参数x和y的值分别是:11, 13 main方法中x和y的值分别是:10, 12

    2:引用类型的参数传值

    引用类型包括类、数组以及后面将要学习的接口。当形参是引用类型时,实参传给形参的值是对象的引用。如果修改形参引用的对象,那么实参引用的对象也会发生同样的变化。因为实参的引用拷贝给了形参,所以实参和形参引用同一个对象,对形参引用对象的修改就相当于对实参引用对象的修改。

    如果修改的不是形参引用的对象而是形参值本身,也就是让形参指向其它对象,则实参值和实参引用的对象都不改变。

    class A{
        int N;
        A(int n){
            N = n;
        }
        void setN(int n){
            N = n;
        }
        int getN(){
            return N;
        }
    }
    class A2 extends A{
    
        A2(int n) {
            super(n);
        }
    }
    class B{
        void f(A a){
            a.setN(12);
    //        a = new A2(111);
            System.out.println("在执行方法f时, 形参a修改了自己的N值");
            System.out.println("当前形参mouse的N值: " + a.getN());
        }
    }
    
    main
    
    
    B b = new B();
            A a = new A(2);
            System.out.println("在调用方法f之前,实参a的N值: "+ a.getN());
            b.f(a);
            System.out.println("在调用方法f之后, 实参a的N值: " + a.getN());
    结果:
    
    在调用方法f之前,实参a的N值: 2
    在执行方法f时, 形参a修改了自己的N值
    当前形参a的N值: 12
    在调用方法f之后, 实参a的N值: 12

    注意:形参指向其它对象这句话的理解,a = new A2(111);让mouse又指向了另一个对象,所以他所修改后的值和实参没有关系,实参的值和引用都不会改变。在代码中新加入的A2就是继承了A,通过方法传入的是A(a)的对象的引用,把a = new A2(111);那么之后改变是A2的内容,和A就无关了,所以A(实参)的引用对象和值都不变。

    结果:

    在执行方法f时, 形参a修改了自己的N值
    当前形参a的N值: 111
    在调用方法f之后, 实参a的N值: 2
  • 相关阅读:
    构造函数析构函数为什么没有返回值?
    std::tr1::shared_ptr 使用的一点体会
    C++完美实现Singleton模式
    为什么C++中空类和空结构体大小为1?
    同时判断CPU是大端还是小端完全实现
    优先级反转
    linux sed 批量替换字符串
    禁掉Apache web server签名 How to turn off server signature on Apache web server
    Python中用format函数格式化字符串的用法
    Eclipse (indigo) 中安装jdk包并运行Maven
  • 原文地址:https://www.cnblogs.com/cmusketeer/p/10026050.html
Copyright © 2020-2023  润新知