Ø        首先先举几个引用数据类型的例子:

String                 StringBuffer               类(包括自己定义的一些类和包中有的类)                     integer              等

Ø        下面的是基本数据类型

Int                       double               char                    Boolean                      等

 

 

 

表面上可以看出两个区别(单从类的角度来看):

1.        引用数据类型必须要实例化之后才可以使用,(String      和     integer除外)

注:String是一个很特殊的引用数据类型

         Inteter是在在使用的过程中会自动的装箱和拆箱

例如:StringBuffer  sb  = new  StringBuffer();

2.        引用数据类型或多或少的会有一些属性和方法

例如:类里面包含的就是属性和方法,比如StringBuffer里面就有append()方法                  还有charAt()方法

深入点看:

3.        引用数据类型是指针的指向,基本数据类型则在内存中直接得到

1.下面一个例子是一个值传递的过程

例如:

         下面是一个类的方法

public void changeNumber(int a,int b)
			{
				int temp=a;
				a=b;
				b=temp;
				System.out.println("交换后的两数 a="+a+"  b="+b);
	}

			在main方法中public static void main(String[] args)
			{
				//实例化的一个过程
				Exam9 ex=new Exam9();
		
				int a=10;
				int b=5;
				System.out.println("交换前的两数 a="+a+"  b="+b);
				//调用交换的方法
				ex.changeNumber(a, b);
		System.out.println("方法调用后的两数 a="+a+"  b="+b);
}



运行的结果是:

交换前的两数 a=10  b=5

交换后的两数 a=5  b=10

方法调用后的两数 a=10  b=5

 

这个是许多人都会犯的错误,包括我也犯了这个错误

就是:方法调用后的两数 a=5  b=10

 

解释:a变量和b变量在内存中的值已经有了,并且值是固定的

基本数据类型的传递是一个值传递的过程

 

                   2.下面的一个例子是一个引用类型的传递

 

                            里面有一个user类:里面有一个属性:String name =“tom”;

public void changeName(User user,String name)
			{
			user.name=name;
}

User user=new User();
			System.out.println("更改前的用户姓名:"+user.name);
			//调用更改名字的方法
			ex.changeName(user, "jack");
		
System.out.println("更改后的用户姓名:"+user.name);



结果是:更改前的用户姓名:tom

更改后的用户姓名:jack

这个是个引用的数据类型,

 

Java接口引用数据类型_Java接口引用数据类型

引用数据类型就是一个指针的一个指向。


1.        这个例子也是一个引用数据类型的例子

public void change(StringBuffer bufferA,StringBuffer bufferB,StringBuffer bufferC)
	{
		bufferA=new StringBuffer("AA");
		bufferB.append("B");
		bufferC=bufferA;
		bufferC.append("C");
		
		System.out.println("方法中:");
		System.out.println(bufferA);
		System.out.println(bufferB);
		System.out.println(bufferC);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		StringBuffer bufferA=new StringBuffer("A");
		StringBuffer bufferB=new StringBuffer("B");
		StringBuffer bufferC=new StringBuffer("C");
		
		Exam10 ex=new Exam10();
		
		ex.change(bufferA, bufferB, bufferC);
		
		System.out.println("方法外");
		System.out.println(bufferA);
		System.out.println(bufferB);
		System.out.println(bufferC);
	}





运行的结果:

方法中的值大家都会的:

方法中:

AAC

BB

AAC

方法外

A

BB

C

关键是方法外面的System.out.println(bufferA);

这个比较难理解:

因为在方法体内部,有实例化了一个A对象,所以在方法里面的bufferA指向的是方法里面的A对象。和外面的没有联系。所以外面的还是指向原来的A对象,所以结果是A。