zoukankan      html  css  js  c++  java
  • java方法中只有值传递,没有引用传递

    public class Example {
    String testString = new String("good");
    char[] testCharArray = {'a','b','c'};

    public static void main(String[] args){
    Example ex = new Example();
    ex.change(ex.testString,ex.testCharArray);
    System.out.println(ex.testString);
    System.out.println(ex.testCharArray);
    }

    public void change(String testString,char[] testCharArray){
    testString = "hhhhhh";
    testCharArray[0] = 'w';
    }
    }
     
    这段代码最后输出的是什么?
    考虑之后给出你的答案。
    good
    wbc

    首先要明白的java的方法传递的究竟是什么?

    对于基本类型,传递的是基本类型的值,而对于引用类型传递的是地址

    所以无论是什么,传递的都是值,因为你可以把地址理解成9x0000这种,也是一个值。

    所以传递的都是值。

    那么方法中什么时候会改变原来的值,什么时候不会呢?

    1、只要是基本类型,传递的是值,这个值是复制了一份出来的,所以怎么都不会改变。

    2、引用类型,传递的是地址,如果这个地址变了,那么原来的值肯定不变。

    3、引用类型,传递的是地址,如果地址没变,而改变了地址对应的对象的属性,那么久会改变原来的值。

    如果还听不明白,那么简单的说,只要在方法里面把传进来的对象重新赋值一个new的对象,那么原来是不变得。

    如同方法中的string,重新赋值了一个字符串,这个时候地址以及改变了,所以原来那个不变。

    而char数组,没有重新复制一个新的char数组,而是把char数组中的元素改变了,那就会改变原来的值。

    对于内存的分析,下面这篇博客特别清楚,我就不多说了。

    搞懂这个真的很重要。

    http://www.cnblogs.com/lixiaolun/p/4311863.html

  • 相关阅读:
    [C4] 前馈神经网络(Feedforward Neural Network)
    [C3] 正则化(Regularization)
    [C2] 逻辑回归(Logistic Regression)
    [C1] 线性回归(Linear Regression)
    Python基础学习
    装饰器
    完全理解Python迭代对象、迭代器、生成器
    django自己搭建的博客
    git学习,哇瑟说实话我想要的
    类继承和多态,子类重写构造函数,多重继承学习
  • 原文地址:https://www.cnblogs.com/linkstar/p/5951141.html
Copyright © 2011-2022 走看看