zoukankan      html  css  js  c++  java
  • Java小白进阶之值传递-引用传递


    1
    class ClassA{ 2 int value;//成员变量 3 } 4 public class TestClassA{ 5 6 public static void main(String args[]){ 7 int value = 10;//局部变量 8 changeInt(value); 9 System.out.println(value);// 10 10 11 ClassA ca = new ClassA(); 12 ca.value = 10; 13 14 changeObject(ca); 15 16 System.out.println(ca.value);//11 17 } 18 public static void changeInt(int value){ 19 value++; 20 } 21 public static void changeObject(ClassA ca){ 22 ca.value++; 23 } 24 25 }
    
    

    解释一:

    1.Java只有值传递,地址传递也是传递的那个地址值,第一个value++之后是一个新地址,第18行传入value,在里面++之后成为一个新的value,是一个局部变量,而打印语句打印的的是外面的那个value,所以是10;

    2.第二个value++是地址传递,地址没有改变,而是把地址指向的值加了1,而外面打印语句仍是这个地址,因为里面的值++了,所以打印出来是11;

    解释二:

      1.第一个++之后还是10是对的,【基本数据类型对象】被修改之后是一个新地址,不影响原来的【基本数据类型对象】,值传递,value++之后的value是个局部变量,和外面的value无关,value++改的是参数value,改了之后是个局部的value,和外面的value就是两个不同的了,外面的还是外面的,没有被修改,值传递的基本数据类型本身是不会被别人修改的

      2.第二个++之后看起来改变了,是因为传入的是一个对象,这个对象里面的成员的值被改变了,但是这个对象本身地址没变,所以看起来像是引用传递,其实还是原来那个对象

     

  • 相关阅读:
    利用STM32播放音乐
    在MDK中使用$Sub$$和$Super$$的记录
    printf函数输出格式控制记录
    I2C软件实现
    C语言单项链表
    CreateEvent函数使用记录
    C语言宏定义使用记录
    GIT推送本地数据到远程空仓库
    2020-ECCV-Local Correlation Consistency for Knowledge Distillation阅读笔记
    2020-ECCV-Feature Normalized Knowledge Distillation for Image Classfication阅读笔记
  • 原文地址:https://www.cnblogs.com/xiaoyinger/p/Amyxiaoying.html
Copyright © 2011-2022 走看看