`

Java函数参数传递(珠海20090326)

阅读更多
1.java的数据类型分两大类:基本类型引用类型.
基本类型有:整数类型,浮点类型,字符类型char (2Byte),布尔类型boolean (1bit).
整数类型又分:字节型byte (1Byte),短整型short (2Byte),整型int (4Byte),长整型long (8Byte).
浮点类型分为:单精度型float (4Byte),双精度型double (8Byte).
引用类型有:字符串String,数组[],类class,接口interface.

2. Java函数参数传递的理解
http://www.cjsdn.net/post/print?bid=1&id=91403
Java函数参数是值传递的。

. 如果参数是基本类型,函数不能改变参数的值。
. 如果参数是对象,函数可以改变参数的属性。
. 如果参数是对象,函数不能使参数指向新的对象。

3.java函数的参数传递都是,总是传值的.对于基本类型就是传值毫无疑问;对于引用类型,也可以说是传值,一个对象的引用,地址相仿的东西.

4.一个例子:
package com.method.test;

class OutClass
{
	String name;
	int number;
	OutClass(String name,int number)
	{
		this.name=name;
		this.number=number;
	}
}

public class TestMethod {

	static public void changeInt(int i)
	{
		i = 9;
	}
	static public void changeFloat(float f)
	{
		f = 99.0f;
	}
	static public void changeString(String s)
	{
		s = "after changed";
	}
	
	static public void newString(String s)
	{
		s = new String("new String");
	}
	static public void changeStringB(StringBuffer sb)
	{
		sb.append("add postfix");
	}
	static public void newStringB(StringBuffer sb)
	{
		sb = new StringBuffer("new StringBuffer");
	}
	static public void changeClass1(OutClass oc)
	{
		oc.name = "hk";
		oc.number = 10000;
	}
	static public void changeClass2(OutClass oc1,OutClass oc2)
	{
		OutClass temp ;
		temp = oc1;
		oc1 = oc2;
		oc2 = temp;
	}
	static public void changeClass3(OutClass oc)
	{
		OutClass temp = new OutClass("BeiJing",10);
		oc = temp;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int originInt = 0;
		float originFloat = 0.0f;
		String cString = "originCString 0";
		String nString = "originNString 0";
		StringBuffer csb = new StringBuffer("originCsb 0");
		StringBuffer nsb = new StringBuffer("originNsb 0");
		OutClass c1 = new OutClass("GZ",20);
		OutClass c2_1 = new OutClass("zq",758);
		OutClass c2_2 = new OutClass("jm",750);
		OutClass c3 = new OutClass("yf",766);
		
		System.out.println("originInt:"+originInt);
		System.out.println("originFloat:"+originFloat);
		System.out.println("cString:"+cString);
		System.out.println("nString:"+nString);
		System.out.println("csb:"+csb);
		System.out.println("nsb:"+nsb);
		System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
		System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
		System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
		System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
		
		System.out.println();
		System.out.println();
		
		changeInt(originInt);
		changeFloat(originFloat);
		changeString(cString);
		newString(nString);
		changeStringB(csb);
		newStringB(nsb);
		changeClass1(c1);
		changeClass2(c2_1,c2_2);
		changeClass3(c3);
		
		System.out.println("originInt:"+originInt);
		System.out.println("originFloat:"+originFloat);
		System.out.println("cString:"+cString);
		System.out.println("nString:"+nString);
		System.out.println("csb:"+csb);
		System.out.println("nsb:"+nsb);
		System.out.println("c1.name:"+c1.name+";c1.number:"+c1.number);
		System.out.println("c2_1.name:"+c2_1.name+";c2_1.number"+c2_1.number);
		System.out.println("c2_2.name:"+c2_2.name+";c2_2.number"+c2_2.number);
		System.out.println("c3.name:"+c3.name+";c3.number"+c3.number);
		
	}

}


结果:
originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0
nsb:originNsb 0
c1.name:GZ;c1.number:20
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766


originInt:0
originFloat:0.0
cString:originCString 0
nString:originNString 0
csb:originCsb 0add postfix
nsb:originNsb 0
c1.name:hk;c1.number:10000
c2_1.name:zq;c2_1.number758
c2_2.name:jm;c2_2.number750
c3.name:yf;c3.number766


5.注意以上的String,StringBuffer.特别是String 是对+ ,= ,== ,等符号进行了重载的.

6.基本类型,和类对象的区别.
基本类型的所有相同值变量的值都是程序常量表中的一个引用,如int i = 1;int j =1;
其中的i,j都等于1所以表中同一常量的引用.而String s1 = newString("hello");String s2 = new String("hello");虽然它们的值都相同,但是它们是类对象是没有常量表的,所以不是同一引用.但String类是特别的,程序有个字符串常量表,当String s1 = "hello";或String s2 = new String("hello").intern()时是加入字符串常量表的.
public class TestString {

	public static void main(String[] args) {
		int i,j,k;
		i =5000;
		j=5000;
		k=j;
		System.out.println(i==j);
		System.out.println(k==j);
		System.out.println(i==k);
		String s1 = new String("hello");
		String s2 = new String("hello");
		String s3 = s1;
		System.out.println();
		System.out.println(s1==s2);
		System.out.println(s1==s3);
		System.out.println(s2==s3);
		String ss1 = "hello";
		String ss2 = new String("hello");
		String ss3 = new String("hello").intern();
		System.out.println();
		System.out.println(ss1==ss2);
		System.out.println(ss1==ss3);
		System.out.println(ss2==ss3);
		
	}

}

true
true
true

false
true
false

false
true
false
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics