`

看看按值传递和按引用传递

阅读更多
    首先我想谈一下写博文的感受,我觉得博文不一定多么复杂,多么有深度,只要能对看的人有所帮助即可。我不赞同写关于一些框架的整合文章,比如struts2与spring整合之类的。当然要是开辟专栏系统得介绍框架的使用就另当别论了。因为在平时开发工作当中,经过几个项目的洗礼,对于框架的使用也就能掌握了。另外一点,在面试的时候,面试官也很少会问某个框架如何使用,一般都会问你这个框架比较深的东西。举个例子,面试官不会问你Spring声明式事务怎么配,会问你Spring利用什么技术实现的这点,会问你Spring是利用什么技术使得利用单例的dao就能实现线程安全。还有不能忽略对基础知识的学习,Spring声明式事务封装的再好,实现的再精妙,底层还是利用java中的基础知识,例如ThreadLocal。闲话说了这么多,可别喷我啊,咱们各抒己见。
    本人上大学的时候,当时学习java的时候,老师是这样给我们讲按值传递和引用传递的。按值传递是将值本身的副本传递给函数参数,这个副本的改变不影响原先的值,按引用传递是讲引用传递给函数参数,对引用所指向的对象的改变将反应到原先的对象本身。现在想想讲的有点笼统,不是很清楚。
    其实不管是按值传递和按引用传递,本质上说都是按值传递,只不过对于一些值类型(java中的一些基本类型,例如int,long等等)传递的是这个值的副本,改变的也是副本,函数返回的也是这个副本值,跟原来的那个值完全就是两码事了。例如下面的图


将i传给change函数,传的是i的值的副本,也就是另外一个5,生成的6,跟原来的i没有关系了。
    按引用传的是什么呢,也是引用值的一个副本(所以我才说本质上说都是按值传递),只不过这个副本和原先的引用都指向的一个堆对象(继承于object),那么你最后生成的那个引用跟原先的引用有什么关系吗?有关系,就是他们都指向一个堆对象,所以对引用副本所指的对象的改变也会反应到原先的那个引用上面(有个特例,String类型)。例如下图,对User U这个引用的副本所指向的堆对象也会反应到原先的那个引用上。


产生按值传递和按引用传递这两个术语的本质原因还是基本类型和对象的区别。传递的时候都是传的值的副本。只不过这个值到底是不是引用的区别。
  • 大小: 17.9 KB
  • 大小: 24.8 KB
1
2
分享到:
评论
3 楼 kely39 2013-05-31  
谢谢分享,虽然知道,但也温习了下
2 楼 ddlgyq 2013-05-31  
xishuixixia 写道
其实这是一个不是问题的问题

恩 是的  个人有个人的理解
1 楼 xishuixixia 2013-05-31  
其实这是一个不是问题的问题

相关推荐

    java按值传递还是按引用传递详细解说

    这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论...事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解,至于称作按什么传递就不是个大问题了。

    经典:值传递和引用传递.rar

    经典教程:值传递和引用传递 一看就明白个中原理

    java值传递和引用传递详解

    本人经过长时间收集的最经典、最有说服力、最易懂的关于值传递和引用传递的详解资料~包看包会~发出去真有些不舍得~

    值传递与地址传递的区别

    很详细总结了两者的区别,保证让你看完不会再不懂的其中的区别

    JS是按值传递还是按引用传递

    按值传递 VS. 按引用传递 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。...我们先看一个C的例子来了解按值和引用传递的区别:  代码如下: void Modify(int p

    为什么Java只有值传递

    我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递:是指在调用函数时将实际参数的地址直接...

    解析Java按值传递还是按引用传递

    主要介绍了解析Java按值传递还是按引用传递,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    引用和对象的关系,还有值传递

    引用和对象的关系,还有值传递,自己整理的,留着慢慢看。。

    深入理解JavaScript的值传递和引用传递

    这些基本类型在赋值的时候是通过值传递的方式。值得注意的是还有另外三种类型: Array、Function和Object,它们通过引用来传递。从底层技术上看,它们三都是对象。 基本数据类型 如果一个基本的数据类型绑定到某个...

    值类型和引用类型的区别

    接下来我们 来看看Demonstration方法,其中演示的就是值类型跟引用类型的区别。 首先,我们声明了两个Person类的实例对象,zerocool和anders,前面提到过,这两个对象都被分配 在堆上,而zerocool和anders本身其实...

    Java中函数是值传递还是引用传递?

    有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解  先看一个例子 public class Test1 { public static void main(String[] args) { int a = 10; changeNum(a); System.out.println("main...

    String类型传递是值传递,char[]类型传递是引用传递的实现

    下面小编就为大家带来一篇String类型传递是值传递,char[]类型传递是引用传递的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看不

    JS引用传递与值传递的区别与用法分析

    这里详细解释JS值传递和引用传递以及二者的区别。 我们先来解释一下这两个的基本概念吧。 函数调用中,传递是一个数值,我们称为 “值传递”。 函数调用中,传递是对象,一般称为 “引用传递”。 现在这里总体上说明...

    深入理解JavaScript 参数按值传递

    本篇文章主要介绍了深入理解JavaScript 参数按值传递,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    python 引用传递和值传递详解(实参,形参)

    主要介绍了python 引用传递和值传递详解(实参,形参)。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    C/C++函数里的指针参数也是按值传递的

    别的不看了,只看看函数的第一句话: void *strcpy(void *dest ,const void *src,size_t n) …{  if(dest==NULL)  dest=(char * )malloc(n); // …… }  乍一看,这句话似乎没什么问题,甚至还做了参数...

    Java值传递的代码讲解,包含基本类型,引用类型

    这是坑,Java只有值传递,学过C++知道,C++有值传递,引用传递,Java已经摒弃了引用传递,因为我用变量接一下多好,简洁,不花里胡哨。 上代码: package com.qcby.studentManeger; public class Test { public ...

    Go 值传递与引用传递的方法

    主要介绍了Go 值传递与引用传递的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    二阶开环传递函数simulink仿真

    详细请看:...(3)自选一组n和O值,使得系统处于欠阻尼状态,在单位阶跃激励下,求其时域性能指标:超调量,峰值时间,上升时间和调节时间(使用CursorMeasurements和 Peak Finder) 。

    layui 富文本编辑器和textarea值的相互传递方法

    今天小编就为大家分享一篇layui 富文本编辑器和textarea值的相互传递方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics