Java引用类型和基本类型

Java中有8个基本类型, 而其他,包括数组,枚举和自定义类都是引用类型。

基本类型:

 

String aaa = "aaaaaa";
String bbb = aaa;

 

执行完后, 变量 bbb 会含有和aaa一样的值,而且在JVM中,会有2个独立的字符串变量"aaaaaa"。

 

Point aa = new Point();

Point bb = aa;

执行后,JVM只有一个Point对象, bb 也是指向这个内存区域的 。

 

所以,代码的测试结果:

 

		String aaa = "aaaaaa";
		String bbb = "bbbbbb";
		
		List tlist = new ArrayList();
		tlist.add(aaa);
		tlist.add(bbb);
		
		aaa = "111111";
		bbb = "222222";
		
		System.out.println(tlist.get(0));
		System.out.println(tlist.get(1));

 执行结果:

aaaaaa

bbbbbb

 

 

		{
		Point aa = new Point();
		
		aa.changeValue(0, 1);
		
		testChange(aa);
		
		System.out.println(aa.x + "," +aa.y);
		}


	private static void testChange(Point aa){
		aa.changeValue(3, 4);
	}
	


class Point{
	int x;
	int y;
	public void changeValue(int x , int y){
		this.x = x;
		this.y = y;
	}
}

  执行结果: 3,4

 

 

数组,枚举, 自定义类结果都是这个。

 

 如果想通过复制的方法, 不改变原对象的值,可以使用 clone() 方法。

 

这个需要对象实现 Cloneable 接口。

 

数组类型可以直接调用这个 clone() 方法。

 

 

在引用传递中, 必须是有了确切的引用, (新建了对象, 初始化了值) , 复合类型的引用才会被传递到方法中去 . .

 

如果在方法中, 对象新建了值, 那么就会丢失原来的引用地址 . . . .

 

以HASHMAP 为例 :  

 


public class Test {

	public static void testMap(Map map){
		//map = new HashMap();      此时,对象的引用被修改了,外部方法将丢失它的值.
		map.put("aaa", "ggg");
	}
	
	
	public static void main(String[] args){
		System.out.println("Haha");

		Map testMap = new HashMap();
		testMap(testMap);
		
		String a = testMap==null?"null":"have";
	}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值