值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
public class ValuePass { public static void main(String[] args) { //primitive type int i = 1; int j = 2; operator(i,j); //String type String a = "a"; String b = "b"; operator(a, b); //String Array String[] array1 = new String[]{"1","2","3"}; String[] array2 = new String[]{"4","5","6"}; operator(array1,array2); //StringBuilder --> Object StringBuilder sb1 = new StringBuilder("a"); StringBuilder sb2 = new StringBuilder("b"); operator(sb1, sb2); //Object People p1 = new People("p1"); People p2 = new People("p2"); operator(p1, p2); System.out.println(i + "," + j); System.out.println(a + "," + b); System.out.println(array1[0]+array1[1]+array1[2] + "," + array2[0]+array2[1]+array2[2]); System.out.println(sb1 + "," + sb2); System.out.println(p1.name + "," + p2.name); } // int type just a value copy transfer public static void operator(int i, int j) { i = 3; j += 1; } // String type variable is final, change value will create a new String. public static void operator(String a, String b) { a += "aa"; b = a; } //Array type variable regarded as an object, transfer copy of address public static void operator(String[] array1, String[] array2) { array1[0]="111"; array2 = new String[]{"7","8","9"};//point to a new array array2[0] = "10"; } //StringBuilder type variable is to transfer a reference of object(copy of address) from variable to parameter public static void operator(StringBuilder a, StringBuilder b) { a.append("aaa");//change value --> affect original object //point to new object --> change b not affect original object b = new StringBuilder("bbb"); b.append("ccc"); } // Object public static void operator(People p1, People p2) { //p1 is the reference of Object p1, change will affect original object p1.name = "p3"; //p2 point to new address, no relationship with variable p2. p2 = new People("p4"); p2.name = "p5"; } } class People{ String name; People(String name){ this.name = name; } }
1. 基本数据类型:实际传递的是数值,形参的改变不会影响实参本身。
2. String类型:String类型是final的,所有改变String的操作都会new一个新的String(新内存地址),原本的String引用则不会受到影响。
3. Array类型:数组实参到形参的传递是引用的传递,传递的是内存地址的拷贝,形参中数组每一项的改变也会影响原本数组对象。
4. StringBuilder类型:也是传递的内存地址的拷贝。
5. 对象类型:
在方法中把对象作为参数,方法调用时,参数传递的是对象的引用(内存地址),实际参数把对对象的引用(内存地址)传递给形式参数。这是实际参数与形式参数指向同一个地址,即同一个对象,方法执行时,对形式参数的改变实际上就是对实际参数的改变,这个结果在调用结束后被保留了下来。
对于对象类型,如果在方法中修改了成员变量的值,那个修改是生效的,方法调用结束后,成员变量值会改变,但是如果方法中把形参指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
相关推荐
2. **类与对象**:Java的核心是类和对象。类是对象的蓝图,它定义了对象的属性和行为。对象是类的实例,可以执行类中定义的操作。掌握如何创建和使用类,理解封装、继承和多态是Java面向对象编程的基础。 3. **封装...
"TIJ4: java中思考的源代码"指的是该书第四版(TIJ4)中所涉及的源代码。这本书不仅仅是一本教程,更是学习者理解Java编程思想的重要参考资料。现在我们来详细探讨一下这些源码所涵盖的知识点。 1. **基础语法**: ...
1. **基础语法**:TIJ4介绍了变量、数据类型、运算符、控制流(if、switch、for、while)、方法、类与对象等基础知识。解决方案会展示如何正确使用这些语法进行程序设计。 2. **面向对象编程**:书中深入探讨了类、...
《图形项目:Panda 3D与Python打造的社交主题老游戏》 在这个名为"Proyecto_Graficos_2021_tij2048"的项目中,开发者运用了Python编程语言以及Panda 3D游戏引擎,创造了一个具有社交元素的经典游戏。这个项目不仅...
这与对象引用共享不同,对象引用共享意味着多个引用指向堆中的同一对象,改变一个会影响所有引用。 String类是一个特殊案例,它的对象既可以在栈中以引用形式存在,也可以在堆中创建。例如,`String str = "abc";`...
完成后,您应该看到几个级别的目录,并且在C:\TIJ4\code目录中,除其他外,您C:\TIJ4\code看到与本书各章相对应的子目录。 从的安装Java JDK SE5或更高版本。 您最终还将需要该文档,该文档可在该页面的后面找到。...
总的来说,这个压缩包是学习和进阶Java编程的理想资源,它将理论与实践紧密结合,有助于读者深入理解和掌握Java语言,并培养良好的编程习惯。通过实践和不断的学习,可以逐步提升编程技能,成为一名熟练的Java开发者...
"tij4-code:java编程思想第四版-GIT" 指的是该书的源代码已经托管在了Git版本控制系统中,方便读者查阅和学习。Git是一种分布式版本控制系统,用于跟踪对文件或项目的修改,非常适合软件开发团队协作和管理代码。 ...
《TIJ_Exercises:Java 4 中思考的练习》是一份专为学习和深化Java编程技能而设计的资源。这个项目基于《Thinking in Java》第四版中的练习,这本书由Bruce Eckel编写,是Java编程领域的一本经典教材。通过解决这些...
2. **类与对象**:Java是一种面向对象的语言,"TIJ4Example"会展示如何定义类、创建对象、封装、继承和多态等面向对象编程的概念。这有助于理解对象的生命周期和它们之间的关系。 3. **异常处理**:Java异常处理...
Thinking in java 4 Source Code
TIJ4 Initialization Cleanup
这个仓库包含了书中所提及的各种项目和代码示例,便于读者在学习过程中直接引用和实践。通过使用 Maven,开发者可以更方便地管理这些示例的依赖,快速搭建开发环境,从而加深对 Java 编程的理解和应用。" 【详细...
《javajar源码-TIJ4-code:java编程思想第四版源码maven构建注意:在D:\Java\jdk1.7.0_80\jre\lib》这个压缩包文件,主要涉及的是Java编程语言的学习资源,特别是《Thinking in Java》第四版的源代码,该书由Bruce ...
《深入理解Java编程思想》是Java开发者们常常参考的一本经典书籍,其源代码"TIJ4-code.rar_TI"提供了一种深入学习Java编程的宝贵资源。这本书籍着重于理论与实践相结合,通过丰富的示例代码帮助读者掌握Java的核心...
《Thinking in Java》(TiJ)是一本经典的Java编程语言学习教材,由Bruce Eckel撰写,首次出版于1998年,并随着Java的发展不断更新版本。第四版(TIJ4)在2006年2月发布,而配套的解决方案指南则是在2007年9月出版。...
"TIJ4-code_idea"项目是这本书的代码示例和练习集,使用IntelliJ IDEA开发环境进行编译和运行。下面我们将详细探讨这个项目中可能涉及的Java知识点。 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、...
根据提供的文件信息,我们可以推断出这是一本与《Thinking in Java》第四版相关的解决方案指南。下面将基于这些信息来生成相关知识点。 ### 关于版权与免责声明 在深入讨论本书内容之前,首先需要明确的是,...
1. **基础语法与数据类型**:源代码中涵盖了Java的基本语法,如变量声明、数据类型(包括基本类型和引用类型)、运算符、控制流语句(if、switch、for、while等)以及方法定义。 2. **面向对象编程**:这是Java的...