参数传递总结
要了解Java中的参数传递,首先需要了解在Java中的基本数据类型都
有哪些?在Java中,基本的参数类型有8种:
byte字节型8bit、short短整型16bit、int整型32bit、long长整型64bit、
float浮点型单精度32bit、double浮点型双精度64bit、Boolean布尔型true
或false、char字符型16bit(字符可以存储一个汉字)。
除了以上提及的8种基本数据类型,Java中还有引用类型,这些引用
类型包含用class、interface、abstractclass定义的类还有数组。这里举例
String类型,查看String的声明可以看到,String类型参数其实是用class
定义的一个类。
那么在Java中参数是如何实现传递的呢?参数的传递也分为两种:
一、值传递:
值传递适用于Java中的基本数据类型和String类型:
如下代码:
public class test(){ public static void main(String[] args) { int x = 1;//给x赋值 int y = x;//把x的值赋给y y++;//对y做出改变 System.out.println("x的值是:"+x+" y的值是: "+y); String str1="张三"; String str2="李四"; str2=str1+"(但并非"+str1+"本人)"; System.out.println("str1的名字:"+str1+" str2的名字:"+str2); } }
输出结果:x的值是:1 y的值是: 2
str1的名字:张三 str2的名字:张三(但并非张三本人)
在引用类型的String进行值传递时str1、str2是两个同为String型的数据,
对两者中的任一个做改变都不会对另一个产生影响。
二、引用传递:
引用传递适用于Java中的引用类型:
如下代码:
public class Student(){ private String name;//名字属性 private int score;//学分属性 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void study(){ score++; System.out.println(name+"学习中,学分是:"+score); } } public class test(){ public static void main(String[] args) { Student stu1 = new Student();//创建一个学生类型的对象 stu1.setName("张三");//设置名字 stu.setScore(0);//初始化学分 Student stu1 = new Student();//创建一个学生类型的对象 stu1.setName("李四");//设置名字 stu.setScore(3);//初始化学分 stu1 = stu2;//赋值 //分别调用两个对象的学习方法 stu1.study(); stu2.study(); } }
输出结果:李四学习中,学分是:4
李四学习中,学分是:5
由以上输出结果可知stu1.study();stu2.study();这两行代码所调用的都是
stu2中的Study方法;因为stu1 = stu2;把stu2 的值赋予了stu1,所以在
执行stu1.study();时实际是执行stu2.study();。
所以在引用传递中对象中所存储的只是地址,当执行stu1 = stu2;时
stu1原有的地址被stu2的地址所取代,使用任何一个对象名来修改对
象的属性值时,另一个对象名来访问时,访问到的是改变之后的数
据。在调用Study方法时也就会调用以stu2为对象的方法。
为更好地了解参数传递,需要了解变量和对象在内存中的存储方
式:
内存分为栈内存和堆内存。栈内存中存储地址,名字,数据。
(正如前例中的student对象存在于栈内存中),堆内存中存储对象的属
性和方法(普通方法、构造方法)(如前例中student对象的study方法)。
相关推荐
在编程语言中,值传递和引用传递是函数参数传递的两种基本方式,它们涉及到内存管理、数据安全以及程序效率等多个重要方面。这篇文章将深入探讨这两种传递方式,并通过内存解析来帮助理解它们的工作原理。 首先,...
c# 值参数 内存分析 图解,是理解C#值参数的本质所在
总之,易语言多线程传递多参数是一项关键的编程技能,它涉及到线程的创建、管理和参数传递。理解并掌握这些知识,能够帮助开发者编写出更高效、更稳定的程序。对于易语言的学习者来说,研究这个源码将是一个宝贵的...
根据给定的文件信息,我们将深入探讨C++中的三种主要参数传递方式:值传递、指针传递和引用传递,并分析它们的特点、效率以及适用场景。 ### 值传递 值传递是最直接的参数传递方式,当调用函数时,会将实参的值...
例如,江苏省计算机等级考试的题目中,通过分析实参类型、是否使用`ByVal`以及实参是否为表达式,我们可以确定参数传递方式并判断调用是否正确。在2001年春季的考题中,题目的关键在于理解VB如何处理不同类型的数据...
### C/C++可变参数函数的参数传递机制剖析 #### 摘要 本文深入探讨了C/C++语言中可变参数函数的参数传递机制,并提出了一种更加精确且灵活的设计方法来处理这类函数。通过分析,我们不仅理解了如何在函数内部访问...
本项目通过实例分析,深入探讨了指针、结构体和数组在CPU参数传递中的工作原理,以及如何进行内存分配、释放和使用。下面我们将详细解析这些知识点。 首先,我们来理解CPU参数传递的基本原则。在C++编程中,函数...
基于C语言函数参数传递规律的探讨 ...本文通过对函数参数传递方式的探讨,总结出了函数参数传递规律,并提供了一种全新的分析工具—图示分析方法,以帮助编程人员更好地理解和分析函数参数传递过程。
对于简单参数传递,最直接的方式是通过命令行参数。当在命令行中启动一个exe时,可以向其传递一个或多个参数,这些参数将在程序的Main方法中可用。 ```csharp // 在WPF应用程序的App.xaml.cs中 [STAThread] public ...
通过以上分析,我们可以清楚地看到不同参数传递方式之间的区别: - **值传递**:函数内部对参数的任何修改都不会影响到原始变量。 - **地址传递**:通过传递变量的地址,可以在函数内部直接修改原始变量的值。 - **...
本篇将详细探讨如何在“frame”之间进行参数传递,以及相关的源码分析和技术工具的应用。 标题中的“frame”通常指的是程序中的帧或者视图,尤其在Web开发中,它可能指的是HTML框架或JavaScript中的帧对象。在多层...
Python 073.参数的传递_传递可变对象_内存分析.mp4
5. **源码分析**:提供的压缩包中的"易语言DLL参数传递字节集源码"可能包含示例代码,展示如何在实际项目中应用上述概念。通过阅读和学习这些源码,你可以更深入地理解字节集在DLL参数传递中的使用,以及易语言中...
本文将深入解析C++中的函数参数传递机制,包括传值调用、传地址调用以及引用调用,并探讨它们之间的区别。 #### 1. 传值调用(Pass by Value) 传值调用是最常见的函数参数传递方式之一。在这种方式下,当调用函数...
Python 074.参数的传递_传递不可变对象_内存分析.mp4
Java 参数传递机制详解 Java 中的参数传递机制是一个经久不息的讨论...Java 参数传递机制详解,揭开了 Java 中的参数传递机制的奥秘,详细分析了基本类型和对象作为参数传递的机制,并揭开了对象作为参数传递的迷惑。
本文对Java语言中参数传递机制进行了深入的剖析,首先从Java的变量内存分配机制开始,对不同的参数传递机制进行了分析,并得出了最合理的结论。 Java语言中参数传递机制可以分为两种情况,即按值传递和引用传递。按...
本文通过内存图示分析法,系统地剖析了C语言函数参数传递的规律,着重讲解了三种不同情况下的参数传递过程以及实参和形参值的变化情况。 首先,函数调用时涉及到的局部变量的概念是理解参数传递的基础。局部变量是...
由于具体的源码没有给出,无法提供详细的代码示例,但以上步骤和概念应该足以帮助你理解和实现.exe参数传递的功能。 总结来说,通过C++编写的应用程序可以通过`main`函数的`argc`和`argv`参数接收命令行传递的参数...
DLL参数传递字节集是DLL编程中的一个重要概念,涉及如何有效地在调用者(应用程序)和被调用者(DLL函数)之间传递数据。在易语言中,这是一种常见的编程技术,它允许程序员通过字节数组来传递复杂的数据结构。 ...