`

JAVA面试题解惑系列(五)——传了值还是传了引用?

阅读更多
removed.

请到博文下载PDF文件:http://zangweiren.iteye.com/blog/241218
57
13
分享到:
评论
30 楼 番茄有益 2008-07-15  
java的引用和C++中的概念不一样,对于java,就是值传递。
29 楼 mindxw 2008-07-15  
“引用”只是表达上的一种说法,便于理解的。实际上一直以来都是copy,就是值传递,没有引用传递的。
28 楼 hover1215 2008-07-14  
唉,都对,看你从哪个角度说了。

27 楼 tou3921 2008-07-14  
把变量的作用域搞清楚了,再把引用是什么搞清楚了。就不用管什么传值,传引用。
其实就是可不可以更改原数据的问题,指向的对象可以改,但引用本身不可改
。。。。。。。。。
26 楼 unique5945 2008-07-14  
我也考虑过这个问题,不过还是觉得统一理解成值传递比较方便。只要知道传“引用的拷贝”这个“值”是什么概念就好!
25 楼 zm2693450 2008-07-14  
好贴,顶起来
24 楼 roger 2008-07-14  
pass by value

java里只有值传递

是把object的引用copy一份传过去的

所以可以改变object里的属性

但是无法改变object指向的地址引用.

就好比C里的pointer,你可以改变pointer指向的value

但是改变pointer本身的value只在当前函数内有效。
23 楼 臧圩人 2008-07-14  
回复tatecn:
谢谢,已更正
22 楼 zhxp791008 2008-07-14  
看了下java程序编程语言这本书(java之父写的).
java中传的都是值,没有传引用一说。
21 楼 tatecn 2008-07-14  
在Java虚拟机中,false是由整数零来表示的,所有非零整数都表示true

引用
但是在栈中,它仍然是以数值形式保存的,即0表示true,其它数值表示false
20 楼 臧圩人 2008-07-14  
回复fantasybei:
如果按照这么理解,那地址不也是个数值吗?是不是也没有传地址一说了呢?
19 楼 fantasybei 2008-07-14  
难道引用不是一个数值?
18 楼 lemon 2008-07-14  
概念上的东西,了解下就好了。
17 楼 hrtc 2008-07-14  
我觉得java中只有传值,这样考虑比较好

传基本类型就不说了公认了,传对象类型时传的是对象的引用也就是栈上的地址的值,而且是在栈上新建了一个引用(这就是传值和不传值的本质区别,传引用不会新建)

c#和c++中都有传引用,加前缀ref
//如下方法调用后就能改变t
     change(ref ParamTest t) { 
         ParamTest tmp = new ParamTest(); 
         tmp.num = 9; 
         t = tmp; 
     }
因为没有拷贝t所以外层的t就会直接指向新对象的引用,否则不会
16 楼 臧圩人 2008-07-14  
回复RyanPoy:
是引用的拷贝,这个没错。那引用的拷贝是什么?仍然是引用。就像你把对象克隆了一份,被克隆出来的就不是对象了吗?
15 楼 wo_su 2008-07-14  
楼主的结论

 
2对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。
 
 

14 楼 tatecn 2008-07-14  
是这样的,在这个意义上说java没有引用传递。

引用

RyanPoy 1 小时前
臧圩人 写道
最后我们得出如下的结论:

基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
对象和引用型变量被当作参数传递给方法时,是引用传递。在方法实体中,无法给原变量重新赋值,但是可以改变它所指向对象的属性。



在java中只有值传递。表现在:在基本类型作为参数时传得是值。而在Object作为参数时传得是引用的copy。记住:是引用的copy,而不是引用的本身。
13 楼 RyanPoy 2008-07-14  
臧圩人 写道
最后我们得出如下的结论:

基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。
对象和引用型变量被当作参数传递给方法时,是引用传递。在方法实体中,无法给原变量重新赋值,但是可以改变它所指向对象的属性。


在java中只有值传递。表现在:在基本类型作为参数时传得是值。而在Object作为参数时传得是引用的copy。记住:是引用的copy,而不是引用的本身。
12 楼 臧圩人 2008-07-14  
JavaEye网友rainerWJY写道:

个人认为值传和传引用应该分开。

传值指的是传递java基本类型

传引用指的是传递java的堆中数据

因为很显然,你不能将int ,long这些基本类型的东西叫做“指针”,我理解的java的引用,就是安全指针。
11 楼 臧圩人 2008-07-14  
JavaEye网友Eastsun写道:

在C/C++/Java这三种语言中,有“按引用传递”方式有且只有C++。
C与Java都是严格按照“pass by value”也就是按值传递。
(依稀记得国内那个很流行的C语言教材中好像有个“按地址传递”的说法,那也应该算“按值传递”)

这个问题不想多说,貌似网上坚持“Java对象类型是按引用传递”的不少。
我去找找JLS中原文,或C++中对“ pass by reference”究竟是怎末定义的再说。

相关推荐

    JAVA面试题解惑系列合集

    .22 1.5 JAVA面试题解惑系列(五)——传了值还是传了引用? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 1.6 JAVA面试题解惑系列(六)——字符串(String)杂谈 . . . . . . . . . ....

    臧圩人--JAVA面试题解惑系列合集.pdf

    **1.5 JAVA面试题解惑系列(五)——传了值还是传了引用?** - **知识点**:澄清Java中参数传递的机制,即所有参数都是按值传递,但对于对象而言,传递的是指向该对象的引用的值,而非对象本身。 **1.6 JAVA面试题...

    JAVA面试题解惑系列——类的初始化顺序

    总结来说,对于Java面试中常出现的关于类初始化顺序的问题,开发者应当掌握以下几点: 1. 单个类内成员的初始化顺序:静态变量、静态初始化块、变量、初始化块、构造器。 2. 在继承关系中,子类的静态成员会在父类...

    Java面试题解惑系列

    ### Java面试题解惑系列——知识点详解 #### 1. 类的初始化顺序 在Java中,类的初始化顺序是一个常见的面试考察点。当一个类被加载时,Java虚拟机(JVM)会按照一定的顺序执行类中的不同部分,包括静态变量、静态...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    JAVA面试题解惑系列(一)——类的初始化顺序 JAVA 是一门面向对象的编程语言,类的初始化顺序是 JAVA 程序员和 JAVA 工程师面试中一个非常重要的知识点。本文将详细讲解类的初始化顺序,并提供了相关的测试代码,...

    JAVA面试题解惑系列(二)——到底创建了几个String对象-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    JAVA 面试题解惑系列之 String 对象创建机制 本文将深入探讨 JAVA 中 String 对象的创建机制,解答常见的面试题目,并探索 String 对象池的概念和机制。 一、String 对象的创建方式 在 JAVA 中,String 对象可以...

    JAVA面试题解惑系列.doc

    《JAVA面试题解惑系列——类的初始化顺序》 在Java编程中,理解类的初始化顺序是面试中常见的考察点,因为它直接关系到程序的执行逻辑。本文将深入探讨类的初始化过程,以及在继承场景下如何理解这个过程。 首先,...

    面试题解惑系列(十)——话说多线程

    【标题】:“面试题解惑系列(十)——话说多线程” 【描述】:本篇文章主要探讨的是Java中的多线程概念及其在面试中常见的问题解析。 【标签】:“面试题解惑系列(十)——话说多线程” 【部分内容】:在Java中,多...

    经典JAVA面试题解惑系列合集

    JAVA面试题解惑系列(一)——类的初始化顺序 在Java编程语言中,理解类的初始化顺序是非常重要的,尤其是在涉及继承的情况下。本节将详细介绍类初始化的规则,并通过实例来帮助理解。 ##### 类的初始化顺序规则 ...

    Java面试题详解,和一些基础知识的深入剖析,个人认为非常棒

    “JAVA面试题解惑系列(八)——聊聊基本类型(内置类型)”涵盖了Java的原始数据类型,包括int、char、boolean等,它们与引用类型的不同之处以及它们的默认值和范围。 “JAVA面试题解惑系列(九)——继承、多态、...

    JAVA面试题解惑系列.pdf

    ### Java面试题解惑系列——类的初始化顺序详解 #### 背景介绍 在Java面试过程中,关于类的初始化顺序的问题是常见的考察点之一。此类问题通常涉及到类的加载机制、静态变量与实例变量的区别、初始化块的作用及执行...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf

    尤其对于那些准备应对技术面试的Java程序员和工程师来说,掌握这一知识点是面试时的必备能力之一。本文将深入探讨Java中类的初始化顺序,特别是在有继承关系的情况下,各个初始化阶段的执行流程,以及这一顺序的重要...

    JAVA面试题解惑系列合集.docx

    ### JAVA面试题解惑系列知识点总结 #### 一、类的初始化顺序 **知识点概述:** 在Java中,类的初始化顺序是一个常见的面试问题。它主要涉及到类成员(包括静态和非静态)的加载和初始化过程。理解这些基础知识有助...

    JAVA面试题解惑系列(六)——字符串(String)杂谈[收集].pdf

    Java中的字符串(String)是编程面试中的热门话题,其特性与操作是面试官常常用来考察候选人基础知识的手段。本文将深入探讨String对象的一些关键知识点。 首先,我们要了解`String`类的`length()`方法。这个方法返回...

    ‘’JAVA面试题解惑系列.doc

    《JAVA面试题解惑系列——类的初始化顺序》 在Java面试中,关于类的初始化顺序是一个常见的考点。深入理解这一概念,对于成为一名合格的Java开发者至关重要。在Java中,类的初始化顺序遵循一定的规则,这包括静态...

    JAVA面试题解惑系列by(zangweiren)

    ### JAVA面试题解惑系列——类的初始化顺序 #### 一、基础知识回顾 在Java编程中,类的初始化顺序是一个非常重要的概念,特别是在面试时,它经常被用来考察面试者对于Java类加载机制的理解程度。类的初始化顺序...

    2021最新java面试合集pdf.rar

    JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记.docx mybatis原理....

    (感谢所有超版和普版以及所有鹏友)

    - **杨中科微软面试分享**:通过一位成功通过微软面试的同学的经历,分享了面试准备的方法和技巧。 - **我的求职经历(原创)**:讲述了作者自己求职过程中的心路历程,为即将毕业的学生提供了宝贵的参考意见。 - **...

Global site tag (gtag.js) - Google Analytics