java传递参数是传值还是传引用

这个问题,网上一查越看越迷糊,纠结完了先总结下

先看个栗子:

1 public class Example {
 2 
 3     public void change(String str1, StringBuffer sbr1, char[] ch1, int a) {
 4         str1 = "world";
 5         sbr1.append("world");
 6         ch1[0] = ‘g‘;
 7     }
 8 
 9     public static void main(String args[]) {
10         String str = "hello";
11         StringBuffer sbr = new StringBuffer("hello");
12         char[] ch = { ‘a‘, ‘b‘ };
13         new Example().change(str, sbr, ch);
14         System.out.println(" str=" + str + "\n sbr=" + sbr + "\n ch[0]=" + ch[0]);
15     }

16 }

输出结果: 

基本数据类型参数传递时按值这是没问题的,主要是对于引用数据类型传递的纠结

java参数传递不存在引用传递

//参考Horstmann在java核心技术卷一 p123的栗子

public static void swap(Employee x,Employee y){

Employee temp=x;
x=y;
y=temp;
}
main...{
Employee a=new Employee("jack");
Employee b=new Employee("rose");
swap(a,b);
}

这个例子看来,java肯定不是传引用了

来看下概念:

按值传递:方法接收的是原始值得副本

按引用传递:方法接收的是原始值的内存地址

java引用:java里面对于引用数据类型,stack里面会把一个可以指向heap里面目标对象的内存地址赋给一个变量,这个变量也叫引用

基本数据类型是传值这是肯定的,那么这个问题考虑完后就是这样的,对于引用数据类型

  copy一个刚好叫做“引用”的东西传过去是叫他传引用还是传值呢 ?  (传的方式、传的东西)

不要纠结了,能理解就好了    【当然形式上看还是传值,传了个引用的副本】

可以这样想,java参数传递相当于一个"="过程,它有3个特点

1."="对于基本数据类型是直接复制值,对于引用数据类型是复制的引用

2."="放弃原来的值、引用,重新获得左边的值、引用

3.复制完成左边右边就没关系了

总结:java参数传递等价于java里面的"="

时间: 2024-10-23 06:30:52

java传递参数是传值还是传引用的相关文章

Java经典问题:传值与传引用?

转自:http://developer.51cto.com/art/201104/254715.htm Java到底是传值还是传引用?相信很少有人能完全回答正确.通常的说法是:对于基本数据类型(整型.浮点型.字符型.布尔型等),传值;对于引用类型(对象.数组),传引用.基本类型传值,所有人都不会对此有疑义;问题出在引用类型上. 为引入正题,不妨先看看下面的例子,你能正确给出程序的运行结果嘛? /** * @(#)Swap.java * * *  @author *  @version  1.00

类对象做函数参数(传值和传引用)

一.传引用 #include "stdafx.h" #include <iostream> using namespace std; class A { public: virtual void show(){cout<<"A"<<endl;} }; class B:public A { public: virtual void show(){cout<<"B"<<endl;} }; c

Java:方法的参数是传值还是传引用

Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleClass temp=a; a=b; b=a; } 因为传入swap的参数实际是对象a和b的一个拷贝(假设为aa,bb). 在方法中虽然交换了aa和bb,但方法结束后它们不再存在. a和b仍然引用调用swap之前的对象. -------------------------分割线 -----------

Java 中的传值与传引用

Java 函数中的传值和传引用问题一直是个比较"邪门"的问题,其实 Java 函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中修改参数值时,无论是基本类型的参数还是引用类型的参数,修改的只是该参数的拷贝,不影响函数实参的值,如果修改的是引用类型的成员值,则该实参引用的成员值是可以改变的,例子如下 class Model { public int i = 0; public String s = "

【转载】Java是传值还是传引用

1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value).这一点我们可以通过一个简单的例子来说明: /* 例 1 */ /** * @(#) Test.java * @author fancy */ public class Test { public static void test(boolean test) { test = ! test; System.out.println("In test(boolean) : test = &q

Java学习笔记:详解传值和传引用

传值和传引用 When you're passing primitives into a method ,you get a distinct copy of the primitive. When you're passing a reference into a method , you get a copy of the reference. 以上引自<Thinging in Java>,总结一下就是不管Java参数的类型是什么,一律传递参数的副本. 在Java中,变量分为以下两类: 对

Java中传值和传引用

今天看了Java中的传值和传引用,对于这一块开始的时候不太能理解,通过查阅其他几篇blog,将自己的理解记录下来: 比较好的几篇blog:http://blog.csdn.net/houpuhope/article/details/7449377; 首先对于传值和传引用需要有一个初步的理解就是,通过传值的方式传进来的参数修改了,对原变量并没有什么影响: 而,通过传引用的方式修改的,原变量值也跟着改变.下面进行详细的解析: 1.对于基本类型Java是按照传值传递的: public class Te

Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题: Is Java “pass-by-reference” or “pass-by-value”? 翻译成中文: Java是传值还是传引用? 请先不要看下面的内容,思考10秒后,在继续阅读!!! 为什么建议先思考,在阅读内容呢? 我们每天可能会利用碎片化的时间阅读很多内容,有很多信息和知识其实在大脑

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

 一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(