Java 传参数时,传值和传引用的区别

转载请注明出处,原文地址: http://blog.csdn.net/h28496/article/details/44732713

中北大学 郑海鹏

最近在复习那九大排序算法时,意外的发现用冒泡排序、插入排序、选择排序等in-place sort时,

sort(a);

再把a输出,就是已经排好序的新数组了。

但是用归并排序等out-place sort时,sort(a); 之后,输出的还是原来的数组!

为什么呢?请看代码和里面的注释:

package zhp.outplace_sort;

import zhp.Tools;

public class Test {

	public static void main(String[] args) {
		int[] a1 = {1, 2, 3, 4, 5};
		int[] a2 = {1, 2, 3, 4, 5};

		f1(a1);
		f2(a2);

		Tools.print(a1); // 输出数组
		Tools.print(a2);
	}

	/**
	 * 方法内改变参数的值(在原内存单元操作),方法结束后参数值是改变后的。
	 */
	public static void f1(int[] a){
		for(int i = 0; i < a.length; i++){
			a[i]++;
		}
	}

	/**
	 * 方法内将参数指向一个新的地址后,方法结束后参数还是会指向原来的地址。
	 */
	public static void f2(int[] a){
		a = new int[]{2, 3, 4, 5, 6};
	}

}

输出:

2 3 4 5 6

1 2 3 4 5

明白了吧~

时间: 2024-10-10 09:01:29

Java 传参数时,传值和传引用的区别的相关文章

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    

JAVA的String的传值和传地址问题

关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变. Java中String的传值/传地址问题: 例子引入: 1 package com.cnblog.GDUTtiantian.String; 2 3 /** 4 * @author GDUTtiantian 5 */ 6 public class JavaString { 7 8 public static void change(String na

PHP上传文件时无法上传成功,$_FILES[&#39;screenshot&#39;][&#39;tmp_name&#39;]为空

最近在学习<HeadFirst PHP & MySQL>一书的第5章"使用存储在文件中的数据",做一个文件上传的应用时,出现了错误,就是文件无法成功上传.这个问题困扰了我很久,不过还好最后终于解决了.原因是我上传的图片文件大小超过了HTML 表单中 MAX_FILE_SIZE 选项指定的值32768Bytes即32KB导致无法上传成功. 我使用了XAMPP(Apache + MySQL + PHP + Perl)集成开发包和Zend Studio 10.6作为PHP

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

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

python传参是传值还是传引用

在此之前先来看看变量和对象的关系:Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象.而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的.例如,a = []是一个空列表对象,变量 a 是该对象的一个引用 例1 def test(c): c.append("hello world") print(c,id(c)) return list = [1,2] test(list) print(list,id(list)) 输出 [1,

函数参数的传值和传指针有什么区别?

前言 我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了. 传值 我们在初学C语言的时候就被老师教过,下面的方式是无法交换a和b的值的: #include<stdio.h> void swap(int a,int b) { int temp = a; a = b; b = temp; printf("swap a = %d,b = %d\n",a,b); } int main(void) {

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

python中给函数传参是传值还是传引用

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

Python 中函数传参是传值还是传引用

直接简单的例子: 1 from ctypes import * 2 import os.path 3 import sys 4 5 def test(c): 6 print "test before " 7 print id(c) 8 c+=2 9 print "test after +" 10 print id(c) 11 return c 12 13 def printIt(t): 14 for i in range(len(t)): 15 print t[i]