首页 > 编程语言 >01-彻底搞懂java的值传递

01-彻底搞懂java的值传递

时间:2022-12-14 21:13:24浏览次数:59  
标签:01 java name Person Deliver person 搞懂 public change

01-彻底搞懂java的值传递

在java的参数传递中,只有一种情况,就是值传递
值传递指的是在方法中,会将原始变量拷贝一份出来,进行处理

基本数据类型

基本数据类型 值就保存在变量中, 拷贝一份进行修改不会影响原来的数据

package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(int i1) {
        i1 = 100;
    }

    public static void main(String[] args) {
        Deliver deliver = new Deliver();
        int i = 10;
        deliver.change(i);
        System.out.println(i); // 10
    }
}

引用数据类型

如何理解下面的例子?
对于引用类型,变量中存放的是对象的地址,因此,当拷贝引用变量时,拷贝的也是相同的地址,即两个对象指向同一个内存区域,修改内存区域的值,原始变量的值也发生变化。

例一


package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(Person p1) {
        p1.name = "xiaoming";
    }

    public static void main(String[] args) {
        Deliver deliver = new Deliver();
        Person person = new Person();
        person.name = "xiaohong";
        System.out.println(person.name); // xiaohong
        deliver.change(person);
        System.out.println(person.name); // xiaoming

    }
}

class Person {
    String name;
}

从下面的例子可以看出,在change方法中新创建的Person变量,将其地址赋值给p1,对原始的p变量没有影响

例二


package com.kuang.real;

/**
 * java值传递
 *
 * @since 2022-12-14
 */
public class Deliver {

    public void change(int i1) {
        i1 = 100;
    }

    public void change(Person p1) {
        Person person = new Person();
        person.name = "xiaoming";
        p1 = person;
    }

    public static void main(String[] args) {

        Deliver deliver = new Deliver();
        Person person = new Person();
        person.name = "xiaohong";
        System.out.println(person.name); // xiaohong
        deliver.change(person);
        System.out.println(person.name); // xiaohong
    }
}

class Person {
    String name;
}

标签:01,java,name,Person,Deliver,person,搞懂,public,change
From: https://www.cnblogs.com/Oh-mydream/p/16983530.html

相关文章

  • [AHOI2014/JSOI2014]支线剧情
    链接:https://www.luogu.com.cn/problem/P4044题目描述:给定一个$DAG$,求若干条条路径,覆盖所有的点,并最小化路径的权值和。题解:由于图是一个$DAG$,所以原问题可以转化为,......
  • [AHOI2014/JSOI2014]奇怪的计算器
    链接:https://www.luogu.com.cn/problem/P4041题目描述:给定一个数列$a$,与常数$L$,$R$,实现下列四个操作:1.将所有数加$d$。2.将所有数减$d$。3.将所有数乘$d$。4.......
  • [AHOI2014/JSOI2014]拼图
    链接:https://www.luogu.com.cn/problem/P4039题目描述:有一些长为$n$,宽为$w_{i}$的黑白色矩形,要将它们拼成一个$n\timesm$的大矩形,求大矩形中最大的全白子矩形的面积的......
  • [JSOI2014]支线剧情2
    链接:https://vjudge.net/problem/HYSBZ-5031题目描述:给定一个树形图,规定一号点为根节点。到达一个点时可以进行下列操作:$1$.沿着一条有向边走到下一个节点。$2$.回到......
  • [ZJOI2014]力
    链接:https://www.luogu.com.cn/problem/P3338题目描述:~~题目已经说的很清楚了吧。~~题解:我们可以知道$E_{j}=\sum_{i=1}^{j-1}\frac{q_{i}}{(j-i)^2}-\sum_{i=j+1}^{n}......
  • [JSOI2013]旅行时的困惑
    链接:https://www.luogu.com.cn/problem/P5258题目描述:给定一颗有向树,求至少多少条有向路径可以覆盖整颗树(有向路径可以相交)题解:路径的覆盖,我们容易想到赛道修建那样......
  • [AHOI2017/HNOI2017]礼物
    链接:https://www.luogu.com.cn/problem/P3723题目描述:给定两个序列,每次可以旋转其中的一个或给其中一个加上一个数$c$,求两个序列对应位置的差的平方和所能达到的最小值。......
  • [NOI2016]循环之美
    链接:https://www.luogu.com.cn/problem/P1587题目描述:求有多少个$\frac{a}{b}(1<=a<=n,1<=b<=m)$在$k$进制下是纯循环小数$(注意:相等的数只算一次)$。题解:可以发现$\f......
  • [JSOI2015]最大公约数
    链接:https://www.luogu.com.cn/problem/P5502题目描述:对于一个序列$a$,求$\sum_{i=l}^{r}gcd(a_{l},....,a_r)\times(r-l+1)$的最大值。题解:利用"签到游戏"的知识,我们......
  • [JSOI2010]旅行
    链接:https://www.luogu.com.cn/problem/P6029题目描述:给定一个$n$个$m$条边的无向图,可以交换$k$组边,求$1$到$n$的最短路。题解:发现值域都比较小,考虑$dp$。我们可以......