`
Wanghuidong
  • 浏览: 45272 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
文章分类
社区版块
存档分类
最新评论
  • openFox: 确实,以前只知道编码是个名词,在项目中编码统一就可以了,原来是 ...
    java编码解惑
  • tianzizhi: 前段时间我也看了许多这方面的东西,基本理解了,拿楼主的总结再复 ...
    java编码解惑

java面向对象值传递和引用传递

阅读更多
一直被这个参数到底是值传递还是引用传递的问题纠结 今晚特意好好想了想,总结如下:
值传递:传递的就是实际的内存当中存储的 实在的值
例如:int a=3; a 就指向了内存当中某一个物理地址里面存储的3
当把a传递给另外一个变量,不管是局部变量还是 全局变量,都是值传递,即把a指向的物理内存中的这个3 传递给了另外一个变量,例如int b=a; 这句话之后就把3传递给了b,可能b在内存中又开辟了一个物理地址空间,但是存储的依然是3。之后就任凭b随便改变里面的值,瞎折腾都可以,但是a指向的那个内存单元中的3不会变的。
例如 int a=3;
     int b=a;
     b++;
     system.out.println(a);//依然是3
     system.out.println(b);//b变为4
这个跟参数传递一样的,例如
int a=3;
public void test(int a){
       a=4;
]
test(a);//这里把a传递给这个函数的时候,就相当于把a传递给上面的b一样,是把值=3传递给了形参a,所以任凭形参a=4 但是原来的a依然不变是3;因为两个a在内存当中的地址不一样,所以互相不影响。

下面讨论引用传递:
                      int [] a={1,2,3};
System.out.println(a[1]);//为2
int b[]=a;
b[0]=4;
b[1]=5;
b[2]=6;
System.out.println(a[1]); //为5
很奇怪吧,这里详细解释一下。因为对象在内存当中存的是通过引用访问的,在内存中a指向的是一个地址的引用,比如a在内存中存的是一个地址00001,而00001地址里面存的才是真正的对象的实际内容,这时候把a传递给b,就是把这个引用地址给了b,让b也指向了00001,这时候b修改了00001内存地址当中的值的时候,就修改了实际的对象值,所以回过头来a再去指向这个00001内存地址的时候里面的值自然也就被修改了。
一句话:当是基础类型传递时候用的是值传递,对象等复合类型传递的时候是引用的传递。
引用传递形象点解释就是我把我们家的门牌号告诉你了,然后你来我家捣乱了,我回家之后家里的东西自然就乱了。而值传递形象点解释就是我把我们家的设计图纸给你了,你在我们家附近盖了跟我一样的房子,然后你随便瞎折腾,跟我们家无关。
1
0
分享到:
评论

相关推荐

    Java面向对象值传递和引用传递

    Java 面向对象值传递和引用传递 Java 面向对象编程中,参数传递是非常重要的一个概念。参数传递有两种方式:值传递和引用传递。了解这两种方式的区别是非常重要的,因为它们对程序的执行结果产生了很大的影响。 值...

    面向对象语言中的值传递与引用传递

    面向对象编程语言中,参数传递主要有两种方式:值传递和引用传递。这两种方式在Java这样的语言中有着明显的区别,理解它们对于编写高效、无误的代码至关重要。 **值传递**: 值传递是Java中处理基本数据类型(如int...

    Java-Java面向对象中引用传递教程

    在Java编程语言中,面向对象特性是其核心概念之一,其中引用来传递对象是一个非常重要的知识点。本教程将深入探讨Java中的引用传递机制,并通过视频教程的形式帮助学习者更好地理解和应用这一概念。 首先,理解...

    Java面向对象基础练习题

    通过对上述练习题的分析,我们可以加深对Java面向对象编程中类和对象、实例变量、方法重载、构造方法、引用和this关键字的理解和应用。这些知识点对于日后进一步学习面向对象的高级特性,比如继承和多态,打下了坚实...

    第04章 面向对象(上) 08 值传递与引用传递

    总之,值传递和引用传递是编程中的基础概念,尤其是在Java这样的面向对象语言中。通过深入理解它们的工作原理,开发者可以更好地控制代码的行为,写出更加高效、健壮的程序。在实际编程过程中,我们需要根据具体需求...

    Java面向对象复习题目

    本文将详细解析与Java面向对象相关的复习题目,包括类、对象、消息传递、分隔符和注释等关键知识点。 首先,我们要理解**类**和**对象**的概念。在Java中,类是创建对象的模板或蓝图,它定义了一组属性(数据成员)...

    Java面向对象程序设计.pptx

    Java面向对象程序设计 Java面向对象程序设计是一本由莫雷利、王尔德合著的图书,出版于2008年 oleh 清华...该书为读者提供了一个系统、全面的Java面向对象程序设计指南,适合国内、Java课程体系的学生和新手程序员。

    java面向对象编程总结

    面向对象编程是 Java 的核心特性,它是一种设计和组织代码的方式,强调将数据和操作数据的方法封装在一起。本文将深入探讨 Java 中面向对象编程的主要概念和机制。 首先,面向对象的思维模式要求我们分析问题,识别...

    java面向对象精讲

    ### Java面向对象精讲 #### 一、面向对象与面向过程的区别 ...通过以上知识点的学习,我们可以更深入地理解Java面向对象的核心概念和技术细节,这对于实际开发中设计良好的面向对象程序至关重要。

    详解java的值传递、地址传递、引用传递

    java是一种面向对象的编程语言,它的参数传递机制是值传递的,而不是地址传递或引用传递。很多开发者对java的值传递和地址传递存在误解,认为java中的基本数据类型是值传递,而对象是地址传递或引用传递。事实上,...

    JAVA面向对象详细资料

    Java面向对象 1 1 学习方法与要求 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 ...

    Java面向对象基础(课件)

    Java面向对象基础是Java编程语言的核心概念之一,它在软件开发中扮演着至关重要的角色。本课件主要针对Java的基础部分进行讲解,特别是面向对象的基本概念以及数组的使用。 首先,我们来深入理解Java的面向对象特性...

    java 面向对象面试题

    以上是Java面向对象编程的一些基础面试题及其解析,掌握这些知识对于理解Java OOP设计模式和编写高质量代码至关重要。在实际面试中,面试官可能会结合实际场景深入提问,例如设计模式的应用、集合框架的使用等,因此...

    孙卫琴《Java面向对象编程》配套PPT

    《孙卫琴《Java面向对象编程》配套PPT》是一份深入浅出的教程资源,旨在帮助学习者全面掌握Java编程中的面向对象概念和技术。Java作为一种广泛应用的编程语言,其面向对象特性是其核心魅力所在,它使得代码更加模块...

    java面向对象试题及答案-.doc

    本资源总结了 Java 面向对象编程的基本概念和技术要点,涵盖了面向对象三大特征、继承、多态、抽象、接口、类、对象等方面的知识点。 1. JVM 的垃圾回收机制 Java 虚拟机(JVM)自带的一个线程,自动运行着的程序...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理数据的方法绑定在一起,形成一个整体——对象。OOP 的主要特征包括封装、继承和多态。 1. **封装**:封装是将数据和操作数据的...

    java面向对象之前习题

    本资源“java面向对象之前习题”提供了39道练习题,旨在帮助学习者巩固面向对象之前的Java基础知识。通过这些习题,你可以对变量、数据类型、运算符、流程控制、数组、函数等概念进行深入理解和实践。 1. **变量与...

    java面向对象考题和答案.doc

    Java面向对象考题和答案详解 本文档将对Java面向对象考题和答案进行详细的解释和分析,从而帮助读者更好地理解Java面向对象编程的概念和技术。 1. 下面代码的输出结果是: public class Main { public static ...

    Java 值传递Visio资源

    在Java中,参数传递有两种方式:值传递和引用传递。这个“Java 值传递Visio资源”包含了几个Visio图形文件,帮助我们直观地理解这两种传递方式。 1. **值传递**: 当方法调用时,对于基本类型(如int, double, char...

    面向对象程序设计-Java(第二版)

    面向对象程序设计-Java(第二...以上只是Java面向对象编程的部分基础知识,实际的课程内容可能还会涵盖更多的高级主题,如反射、注解、设计模式等。通过深入学习这些内容,开发者可以构建高效、可维护的Java应用程序。

Global site tag (gtag.js) - Google Analytics