java 中参数的传递

02-11-26 zhao_hong_mei

package edu;

/**

* Title:

* Description:

* Copyright: Copyright (c) 2002

* Company:

* @author

* @version 1.0

*/

public class StrTest {

public StrTest() {

}

public void changePos(String str1,String str2){

String str;

long l1=Long.parseLong(str1);

long l2=Long.parseLong(str2);

if (l1>l2){

str=str1;

str1=str2;

str2=str;

}

System.out.println("str1=" + str1 + " and " + str2);

}

public static void main(String[] args) {

StrTest strTest1 = new StrTest();

String str1="72";

String str2="70";

strTest1.changePos(str1,str2);

System.out.println("str1=" + str1 + " and " + str2);

}

}

结果:

str1=70 and 72

str1=72 and 70

为什么是值传递,能解释以下吗?str1和str2为什么没有改变?

iceant
2002-11-30 17:01

你要明白 基本类型和 String 是很特别的,他们都是按值传递的。

String 虽然是一个类,但是它本质上来说,还是一个 char[]

当你将一个 String 传递到方法内时,实际上做了一个 char 数组的 copy.

所以在 Java 里是没法这样实现 swap 功能的

cc
2002-12-02 01:01

我得印象里,面向对象好象用值参。大都是用行参,对象调用自己的方法,改变自己的属性,属性对于对象本身来说是全局的。如果对象的方法中的参数传进来的是一个对象的话,才算是值参的。

似乎这个问题不是面向对象要考虑的问题。

String的确很特别,他是一个class 。

benfree
2002-12-03 01:08

java中参数的传递方式只有一种,就是按值。

基本数据类型变量的值是数据本身,

对象变量的值是对象句柄。

作为参数传递时,按值拷贝数据值或对象句柄值

String对象的特殊之处在于内容不可变。