zoukankan      html  css  js  c++  java
  • 值传递

    在java中,基本数据类型传递的就是他的数据,引用类型传递的是他的地址。

    因此,当A方法传递一个基本数据类型到B方法时,在B方法中无论怎么修改这个值都不会改变A方法中的值,B中修改的值随着B方法结束运行被弹出栈,不会影响到A方法中的值

    public class PassTest {
        public static void main(String[] args) {
            int a=1,b=2;
            change(a,b);
            System.out.println(a+" "+b);
        }
        private static void change(int a,int b){
            int temp=a;
            a=b;
            b=temp;
        }
    }
    

    当A方法传递一个引用数据类型到B方法时,B方法根据传过来的地址找到在堆中存放的对象,去修改其中的数据,B方法弹出栈时,这个修改在堆中还是真实有效的

    注意:B中获取到的地址值是A中的地址值复制了一份到B中的,这是占用了两块内存的相同的地址值

    class User{
        int id;
        public User(int id){
            this.id=id;
        }
    }
    public class PassTest {
        public static void main(String[] args) {
            User user=new User(1);
            change(user);
            System.out.println(user.id);
        }
        private static void change(User user){
            user.id=2;
        }
    }
    

    当A方法传递一个String到B方法时,B方法赋值给这个String,实际上是新建了一个字符串对象(如果字符串常量池里没有这个值的话),B中地址值就变成了新的对象的地址,跟A里的地址已经是两个对象了

    public class PassTest {
        public static void main(String[] args) {
            String s="a";
            System.out.println(s.hashCode());
            change(s);
            System.out.println(s);
            System.out.println(s.hashCode());
        }
        private static void change(String s){
            s="b";
            System.out.println(s.hashCode());
        }
    }
    
  • 相关阅读:
    2018QBXT刷题游记(4)
    洛谷 P4302 字符串折叠 题解
    hdu5009 Paint Pearls 题解
    CF467C George and Job 题解
    洛谷P2622 关灯问题II 题解
    洛谷 P3049园林绿化 题解
    洛谷 P1064 金明的预算方案 题解
    洛谷P1979 华容道 题解
    2018QBXT刷题游记(3)
    2018QBXT刷题游记(2)
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14322209.html
Copyright © 2011-2022 走看看