Java学习 | 面向对象 | 参数传递

本文探讨了Java中对象和引用的概念。对象是在堆内存中通过new运算符创建的,而引用是一个保存对象内存地址的变量,用于访问对象的属性。在参数传递时,Java总是传递变量的值,对于引用类型,实际上是传递对象的内存地址。通过示例展示了基本类型的值传递和引用类型的地址传递,说明了修改引用参数会直接影响原始对象的特性。
摘要由CSDN通过智能技术生成

对象和引用的概念

  • 对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。

  • 引用:是一个变量,不一定是局部变量,还可能是成员变量。

    引用保存了内存地址,指向了堆内存当中的对象。所有访问实例相关的数据,都需要通过引用”的方式访问,因为只有通过引用才能找到对象。只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。

非引用的参数传递

package com.diamondk.javase.test04;

/**
 * Java语言在调用方法时涉及到参数传递的问题
 * 参数传递实际上传递的是变量中保存的具体值
 * int i = 10;
 * add(i); 等同于 add(10);
 */

public class Test01 {
   public static void main(String[] args){
      int i = 10;
      add(i);
      System.out.println("main --> " + i);   // 10

   }
   public static void add(int i){
      i++;
      System.out.println("add --> " + i);       // 11
   }
}

在这里插入图片描述

引用的参数传递

package com.diamondk.javase.test04;


/**
 * 最终结论:
 * 方法调用的时候,涉及到参数传递的问题,传递的时候,java只遵循一种语法机制,就是将变量中保存的值”传递过去了,
 * 只不过有的时候这个值是一个字面值10,有的时候这个值是另一个jav对象的内存地址0x12344
 */

public class Test02 {
   public static void main(String[] args){
      User u = new User(20);
      // User u = 0x1234
      // 传递u给add方法时,实际上传递的是u变量中保存的值,只不过这个值是一个Java对象的内存地址
      add(u);    //add(0x1234)
      System.out.println("main --> " + u.age);   // 21
      
   }

   private static void add(User u) {
      u.age++;
      System.out.println("add --> " + u.age);       // 21
   }
}
class User{
   int age;
   public User(int i){
      age = i;
   }
}

在这里插入图片描述

int i = 10;
int j = i;    // i传递给,实际上只是将i变量中保存的10传递给了,实际上是一块全新的内存空间。
User u1 = 0x1234;
User u2 = u1;  //u1传递给u2,实际上是将0x1234这个值赋值给u2了,u和u2实际上是两个不同的局部变量,
            //但是它们这两个变量指向堆内存中同一个java对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值