软件构造课程心得:可变与不可变数据类型

作者分享了编程学习中的重要体会,强调了数据类型的理解,尤其是可变(如StringBuilder)和不可变(如String)的区别。讲解了如何区分和合理运用这些数据类型,以及final关键字的作用。
摘要由CSDN通过智能技术生成

注:本文仅为本人上课时的一些心得体会,由于本人能力有限,文章会有很多错漏之处,还请各位谅解,欢迎指正。

一、前言

        从前我编程的时候,对于数据类型没有一个很好的理解,基本上就停留在知道他们都是什么意思的层面,对于他们在底层中的原理啊什么的没什么了解,也觉得没必要,大一时候那些编程课都是直接拿过来就用,没有思考,也从来没有考虑过这样做会不会带来什么安全隐患。

        但在这节课上,我第一次知道了数据是怎么初始化的,数据的类型有可变与不可变之分,以及如果不注意正确地使用数据类型会造成多严重的后果,受益良多。

二、可变与不可变

        如果让以前的我看这个标题,我会感到匪夷所思,“数据不都是能改变的吗,给他赋另一个值不就行了嘛”,我得出这样的结论也很正常,当时我写代码几乎都是这样:

String a="hello,world";
a="nihao";

对于当时的我来说,这似乎很自然,也很方便。但是现在我明白,我之所以能这样写,是因为这不是简单的赋值,而是开辟了两块内存空间,存入了两个字符串,改变了a的指向!

        指向?什么指向?谁指向谁?

        这里就要提到变量是怎么创建的了,在Java中,当我们创建一个变量,会在内存中开辟一块空间,记录变量的值,而该变量指向这个值。也就是说,变量和他的值可以理解为两个东西,变量指向值。

        而当我们改变一个变量的时候,就有了两种情况:

  • 改变这个变量的指向
  • 直接改变这个变量所指向的值 

        根据这两种修改情况的不同,就可以把数据类型分为可变数据类型和不可变数据类型。

1)不可变数据类型

        不可变数据类型是指当其一旦被创建后,就不能再修改。Java中的String类就是这样的例子,每一个String字符串都有自己的内存空间,如果我们想改变一个String,就需要再开辟一块内存空间,存储新的值,再将该String指向新创建的内存空间。

        对于不可变类型,我们不难发现对其频繁修改会产生大量的临时拷贝,需要对他们进行垃圾回收。但是,由于其不可变性,使之更加的安全可靠,在质量指标上表现的更好。

2)可变数据类型

        可变数据类型在修改时,可以直接修改其所指向的内存空间的值,而不用开辟新的内存空间。StringBuilder就是这样的一种数据类型。

         可变数据类型可以最少化拷贝,以提高运行效率,也适合在多个模块之间共享数据(这个没怎么实际应用过,体会不是很多)。但如果同时有多个指向同一个内存空间,则会很危险。

        所以在使用时,要根据需求折中地使用这两种数据类型。

        还有一个关键词与这两个数据类型息息相关:final。final加上一个数据类型的变量时,就表示该变量的指向不可再变,但对于其指向的内存空间的值,是可以进行修改的(前提是可以修改)。

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值