Java内存分配续

以下面的代码表示八大基本类型(分三种情况讨论)

1、

	  int s1 = 10;
	  int s2 = 10;
	  //Integer s2 = new Integer(10);
	  System.out.println(s1==s2);//true;
由于int为基本类型,那么创建的引用变量s1,s2和值便将存储在桟中。如图所示


由于在桟中有数据共享机制

第一步,首先将s1这个引用存储在桟中,然后再桟中查找是否有“10”这个值,很明显没有,然后创建一个内存将“10”存入其中。

第二步,同样在桟中创建引用s2,然后查找是否有“10”(数据共享),发现已经有了,那么就不必再创建了,直接将引用s2指向10的地址就行了,所以他的存取速度比较快。


2、

          Integer s1 = new Integer(10);
	  Integer s2 = new Integer(10);
	  System.out.println(s1==s2);
很明显,有关键字new,便显式串讲对象,通过new关键字虽然s1、s2这个引用对象仍存在桟中,但是其值则存放在堆中,

很明显,堆中不提供数据共享,所以他们指向的是不同的地址单元,所以结果为false;

3、

          int s1 = 10;//(1)
	  Integer s2 = new Integer(10);//(2)
	  System.out.println(s1==s2);//true

               

通过上面的两步执行分别建立如上图的内存分配,按理说s1==s2,应该为false才对。但是由于包类型有自动拆箱装箱的功能,所以,在比较“==”的时候,会将s2拆箱,所以结果为true。

4、

注意的是,










猜你喜欢

转载自blog.csdn.net/qq_35703954/article/details/70195635