现金与存折---值类型和引用类型

在软考的时候也接触过值类型和引用类型,那时候应付做题还是可以的,可是考完之后再突然面对这两个词汇,又觉得迷茫无措了。现在想想,还是实践吧,当时只是简单的了解了其原理,没有用代码来实现,所以只能算是初步的,暂时的了解。这篇文章就是为了弥补初步的遗憾,进行深一步的学习。

理论联系实践,才是对现实的超越。就像门和钥匙一样,完美结合才有防窃和安全之功效。所以,该篇文章的主要思路也是从理论和实践两个方面分别对“值类型和引用类型”进行详细阐述。

-------------------------------------------理 论 篇------------------------------------

1.值类型

直接将内存存储在栈内,由系统自动释放资源的数据类型。简单来说:值类型就好像现金,需要的时候直接用就可以;

2.引用类型

由类型的实际值引用表示的数据类型。简单来说:引用类型就好像是存折,需要的时候必须先去银行换成现金,然后使用。

 3.两者对比

先用一张简单的图表显示,更为直观易懂。

-------------------------------------------
践 篇
------------------------------------

看了上图后,会对值类型和引用类型有个大概的了解,下面详细说说两者在内存分配方面的区别。

如上表可知,值类型变量是在栈内存中分配空间,引用类型则是在堆内存中分配空间的。这么说是什么意思呢?通过下面的代码实例和内存分配图来看看吧。

//首先,构造一个最简单的类引用类型
Publicclass MyClass
{
}

//然后,对比值类型和引用类型
private static void Main()
{
int i;                    //定义值类型变量
MyClass mc;    //定义引用类型变量

i = 5;               //值类型变量的赋值
mc = new MyClass();    //创建引用类型变量
}

很简单的一段代码,我们就以此为例,配合内存分配图,来详细对比一下值类型和引用类型在内存分配上的区别。

首先是他们共同的开始,那就是只要是变量(不管是值类型还是引用类型变量)声明后,都会在栈内存中分配其相应的一部分空间。如下图:

               
                                                                   

至于这部分空间里存放的是什么东西,就要看这个变量是值类型还是引用类型了。

1)值类型

i = 5;               //值类型变量的赋值

当为值类型变量进行赋值时,栈内存中存放的就是这个值类型自身的值。如下图所示:

             
                                                                  

由图可知,值类型变量本身所占的内存中就存放着其值,就好比上文提到的“现金”一样,需要用的时候直接使用就可以,很简单,一步就可到位。

 (2)引用类型

mc = new MyClass();    //创建引用类型变量

当为引用类型变量时,不仅仅需要在栈内存中为其分配空间,也要在堆内存中为其分配适当的空间。不过这里需要注意,需要了解的就是---栈内存中存放的是什么?堆内存中存放的又是什么?还是看图来说话吧:

由图可知,引用类型变量的值是存放在堆内存中的,在栈内存中存放的则是该变量在堆内存中相对应的首地址,就好比是“存折”一样,栈中存放的只是存折的账号,需要使用时,我们还需要根据栈中的“账号”找到堆内存中相对应的“现金”,然后才可使用。

不知道说到这里,读者朋友们理解了值类型和引用类型的区别了吗?尤其是在内存分配方面的区别,这是其本质上的不同。期待与您的交流~

现金与存折---值类型和引用类型,布布扣,bubuko.com

时间: 2024-10-24 23:27:27

现金与存折---值类型和引用类型的相关文章

Java值类型和引用类型

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by

java 值类型和引用类型的区别

1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字

Java中值类型和引用类型的区别

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by

学习记录 java 值类型和引用类型的知识

1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字

Java中值类型与引用类型

JAVA中值类型和引用类型的不同? 1.定义 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变:值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现. 2.分类 (1)值类型 值类型也就是基本数据类型 基本数据类型常被称为四类八种. 四类:1.整型 2.浮点型 3.字符型4.逻辑

JAVA初学(1):值类型和引用类型的区别

JAVA值类型和引用类型的区别(转)                                                          [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.     通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.-

值类型与引用类型()

直白点儿说:值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现. 声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值.引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样. 举一个简单的例子,我们有一个名为Point2D的对象,用来表示二维空间中的坐标,每一个坐标值x,y都用一个short类型表示,整个对象占4个字节.现在假设我们需要在内存中存储1000万个这样的坐标点集

JAVA 关于值类型和引用类型的区别

Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法,当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现. [值类型]也就是基本数据类型 基本数据类型常被称为四类八种四类:   1,整型 2,浮点型 3,字符型4,逻辑型八种:     

.NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱

一.“堆”,“栈”专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道...“堆”,“栈”是什么?哦,这个知道... 之前我也写过一篇堆栈的文章,不过写的不深刻,剖析的也不全面,所以今天也参考了一些大牛的资料. 一.预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其    操作方式类似于数据结构中的栈.栈是一个内存数组,是一个LIFO(last-in  f