传统的看法认为,java有两种传递,值传递和引用传递,值传递是基本数据类型的传递,如int,long,byte,引用传递是对象传递时,实际传递的是栈空间对象地址的引用。
有一种看法认为,引用传递实际也是值传递,因为传递的引用不是引用地址本身,而是引用地址的拷贝,从这个意义上来说,也相当于把引用地址的值当作参数传递,同基本数据类型的传递是拷贝一份数据传过去,是相同的。
请参考一下
class Letter {
char c;
}
public class PassObject {
static void assign(Letter y) {
y.c = 'b';
}
public static void main (String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println(x.c);
assign(x);
System.out.println(x.c);
}
}
在方法assign里,传递进来的y是Letter对象的引用地址的拷贝,对引用地址拷贝的操作,影响到原拷贝的改变,所以对象的属性得到了赋值改变。
class Number {
int i;
}
public class Assignment {
public static void main (String[] args) {
Number n1=new Number(); // n1引用对象n1的内存地址
Number n2=new Number(); // n2引用对象n2的内存地址
Number n3 = n1;
n1.i=9;
n2.i=47;
System.out.println("(1)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
n1=n2; // n1引用n2的内存地址, 不再引用原来的n1内存地址, 这时, n1和n2是同一个对象
System.out.println(n1==n2); // n1和n2是同一个对象
System.out.println(n3==n1); // 这时n3和n1不是同一个对象, 因为n1的引用地址已变, n3引用了一个无效地址?不是,是原来n1的地址。
System.out.println(n3.i);
System.out.println("(2)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
n1.i=27;
System.out.println("(3)n1.i:"+n1.i+"-------->n2.i:"+n2.i);
}
}
n3=n1把n1的对象引用地址指向了n3,n3同时获得了对n1和对象的引用地址,n3改变,n1也会改变,在n1=n2时,n1获得了n2的引用句柄,n1引用的对象地址改变, 但n3的引用还是原来n1的引用地址,没有改变。
分享到:
相关推荐
Java中传递对象时传递的并不是对象中的内容, 而是对象的地址。
Java 中只有按值传递的原因是因为 Java 程序设计语言的设计理念。在 Java 中,方法参数的传递方式是按值传递的,而不是按引用传递的。这意味着,当方法接收到参数时,实际上是接收到参数的副本,而不是原始参数本身...
### Java中的按值传递与按引用传递详解 #### 一、引言 在Java编程语言中,关于参数传递的方式一直存在两种观点:一种认为Java仅支持按值传递,另一种则指出Java同时支持按值传递和按引用传递。实际上,这两种观点...
我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,...我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;
有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test1 { public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("main...
基础知识点/面试题总结:(必看):Java基础常见知识点&面试题总结(上)Java基础常见知识点&面试题总结(中)Java基础常见知识点&面试题总结(下)重要知识点详解:为什么Java中只有值传递?Java序列化详解泛型&...
Java中的参数传递方式一直以来都是一个讨论的热点,尤其是在学习编程初期,值传递和引用传递的概念可能会引起混淆。本文将深入探讨Java中参数传递的实质,以帮助理解和澄清这一问题。 首先,我们需要理解值传递和...
为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java ...
基础知识点/面试题总结:(必看):Java基础常见知识点&面试题总结(上)Java基础常见知识点&面试题总结(中)Java基础常见知识点&面试题总结(下)重要知识点详解:为什么Java中只有值传递?Java序列化详解泛型&...
为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结 : Java...
为什么 Java 中只有值传递? Java 序列化详解 泛型&通配符详解 Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java ...
在 C++ 语言中,这两种传递方式都是合法的,而在 Java 语言中,只有按值传递是一种合法的传递方式。 知识点: * 按值传递和按引用传递是两种不同的参数传递方式 * 按值传递是指函数参数是通过值来传递的 * 按引用...
总结来说,Java只有值传递,这确保了方法不能直接修改对象,只能通过返回值或全局变量间接影响。C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的...
一些书中认为,在 Java 中参数传递都是按值传递的,但是这种说法存在一定的模糊性。本文将对 Java 语言中的参数传递进行详尽的说明。 参数传递是指在方法调用时,传递参数的方式。在 Java 中,参数传递可以分为按值...
在Java中,函数参数的传递方式只有两种,即按值传递(Pass by Value)和按引用传递(Pass by Reference)。实际上,Java中所有的参数传递都是按值传递,这意味着当你将一个变量传递给方法时,方法接收到的是该变量的...
这是坑,Java只有值传递,学过C++知道,C++有值传递,引用传递,Java已经摒弃了引用传递,因为我用变量接一下多好,简洁,不花里胡哨。 上代码: package com.qcby.studentManeger; public class Test { public ...
Java 语言中,参数传递的方式只有一种,那就是按值传递。这意味着无论参数是基本类型还是引用类型,函数或方法在接收到参数时,都只会得到这些值的一个副本,而不是原始值本身。对于基本类型的参数,这个副本就是...
在iOS开发中,UI界面之间的值传递是应用交互设计中的重要环节。这涉及到不同视图控制器之间数据的流通,确保用户操作的数据能够准确无误地更新到其他界面。本篇文章将详细探讨四种常见的UI界面间值传递方法:Key-...
Java Lambda 表达式是Java 8引入的一个重要特性,它允许程序员以更简洁的方式传递匿名函数。Lambda表达式在处理函数式接口时特别有用,这些接口只有一个抽象方法,如`Comparator`。Lambda表达式的引入使得Java语言...
对于基本类型,Java采用值传递的方式,而对于引用类型,则是传递引用的副本。 1. 值传递与引用传递的区别: - **值传递**:当传递基本类型参数时,实际传递的是该变量的值的一个拷贝。例如,对于一个布尔值`...