java 中参数的传递

zhao_hong_mei 02-11-26

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对象的特殊之处在于内容不可变。