Java中等于号,传值和传址区别

本文详细介绍了Java中等于号的两种作用,区分了传值和传址的区别。在Java中,等号用于数据赋值时实行传值,而在引用对象间则传递地址。通过自建类ListNode的例子,阐述了对象引用如何实现地址传递。同时,解释了传值(仅传递基本类型值的拷贝)和传址(传递对象引用地址)的概念,说明了在函数体内修改传入地址所指向对象数据会直接影响外部对象的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Java等号的两种作用

java的等于号在进行数据之间赋值时就是传值;在引用对象之间,等于号作用就是传地址。

比如自建类
ListNode xList=ListNode(0);
ListNode newList=xList;//这步用途,例子如下

  ListNode xList = new ListNode(0);//创建一个值为0的头部节点
  ListNode newList = xList;//声明一个变量用来在移动过程中指向当前节点!
      while(ture){//依次获取链表的值
           ListNode sumNode = new ListNode(10);//生成新的节点
           newList.next = sumNode;//把新节点连起来
           newList = newList.next;//当前节点往后移动
      }
  return xList.next;//这样子return的就是10-10...,而不是0-10-10...!

在这里等于号就是起到了地址传递的作用,此时b的指针指向了a的地址,b引用了a的地址,起到了传地址的作用。

2.传值和传址的区别

传值:传的是基本类型,通过参数传递给方法传的是值的拷贝,所以函数体内的值的变化,不会影响函数体外的值

传地址:传入的是对象的引用,通过参数传给方法,传的是地址的拷贝
如果在函数体内,改变传入地址所指向的对象数据,会影响函数体外的对象。可以这么去理解 :我把地址的内存,传给了方法,方法改变了内存中的内容,所以指向它的引用的值自然都会改变

3.例子

public class test {
/*
 * Car :类型(自定义类型)
 * c :引用某种对象,x=null,x没有指向任何对象
 * = :引用(指向、绑定)
 * new :JVM创建对象的命令
 * Car() :构造器--构造方法constructor
 */
	Car c = new Car(brand,color,price);
	
}
<think>我们正在讨论Java中的赋操作。根据用户的问题,他们想了解Java中使用等于号进行赋的语法用法。在Java中,单个等于号(=)用于赋操作,即将右侧的赋给左侧的变量。注意:双等于号(==)用于比较,三等于号(===)在Java中不存在(但在JavaScript中存在)。根据引用:[^1][^3]提到了双等于号(==)equals方法的区别,特别是对于字符串比较。 [^4]解释了单等于号(=)是赋,双等于号(==)是比较(比较的是对象的引用,即栈地,除非是基本数据类型则比较)。 [^5]提到了赋(=)以及自增赋(+=)等。因此,我们主要关注单等于号(=)的赋操作。回答结构:1.赋操作的基本语法2.赋操作的使用场景3.注意事项(比如不能用于比较,与双等于号区别)4.扩展:复合赋操作符同时,根据系统指令,我们需要生成相关问题。注意:用户的问题只涉及单等于号的赋,但为了全面性,我们可以简要提及双等于号以避免混淆。由于用户要求使用中文回答,并且要结构清晰,我们将逐步解释。</think>### Java等于号操作详解 在 Java 中,**单个等于号 `=` 是赋运算符**,用于将右侧的或表达式结果赋给左侧的变量。以下是关键语法用法: #### 1. **基本语法** ```java 数据类型 变量名 = /表达式; ``` - **示例**: ```java int age = 25; // 将整数 25 赋给变量 age String name = "Alice"; // 将字符串赋给 name boolean isValid = true; // 将布尔赋给 isValid double result = 10 * 3.14; // 将表达式计算结果赋给 result ``` #### 2. **复合赋运算符** Java 提供扩展赋运算符,结合算术运算与赋: ```java int count = 10; count += 5; // 等价于 count = count + 5 → 结果 15 count *= 2; // 等价于 count = count * 2 → 结果 30 count %= 4; // 等价于 count = count % 4 → 结果 2 ``` > 支持的操作符:`+=`、`-=`、`*=`、`/=`、`%=` 等[^5]。 #### 3. **对象赋引用类型)** ```java List<String> list1 = new ArrayList<>(); list1.add("A"); List<String> list2 = list1; // 将 list1 的引用赋给 list2 list2.add("B"); // 通过 list2 修改会影响 list1 System.out.println(list1); // 输出 [A, B](两者指向同一对象) ``` > **重要**:赋操作复制的是对象引用(内存地),而非对象本身[^2][^4]。 #### 4. **与双等于号 `==` 的区别** | 操作符 | 用途 | 示例 | 说明 | |--------|--------------|-----------------------|-------------------------------| | `=` | 赋 | `int x = 10;` | 将赋给变量 | | `==` | 比较相等性 | `if (x == 10) {...}` | 基本类型比较引用类型比较地[^1][^3][^4] | #### 5. **注意事项** - **类型必须匹配**:左侧变量类型需兼容右侧。 ```java int num = "text"; // 编译错误!类型不兼容 ``` - **避免混淆 `=` `==`**: ```java if (isValid = true) {...} // 错误!实际是赋而非比较 if (isValid) {...} // 正确写法 ``` ### 关键区别总结 | 场景 | 正确操作 | 错误操作 | |--------------------|-------------------|-----------------| | 变量赋 | `int a = 5;` | `int a == 5;` | | 字符串内容比较 | `str.equals("A")` | `str == "A"` | | 对象复制(深拷贝) | `new ArrayList<>(list1)` | `list2 = list1` [^2] | > **提示**:对象内容比较必须用 `equals()` 而非 `==`(`==` 比较内存地是否相同)[^1][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值