首页 > 其他分享 >可变数据类型(mutable)与不可变数据类型(immutable)总结

可变数据类型(mutable)与不可变数据类型(immutable)总结

时间:2024-05-27 23:11:53浏览次数:14  
标签:StringBuilder 不可 数据类型 地址 内存 可变 mutable immutable

一、基本概念

不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。其中基本数据类型都是不可变数据类型,例如int,如果一个int类型的数据发生改变,那么它指向了内存中的另一个地址,但是需要注意的是java缓存了所有-128-127的值。
可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型,当可变数据类型改变时它实际上是更改了内存中的内容。

二.可变与不可变数据类型分别有什么优势?

1)可变数据类型:

由于对不可变数据类型进行修改会产生大量的临时拷贝,很占用空间,相比之下可变数据类型可以将拷贝最少化从而提高效率。

一个程序较多的的使用可变数据类型,会获得更好的性能。

这种类型也适合于在多个模块之间共享数据。

2)不可变数据类型:

不可变类型更安全,用户或其他人访问时,对类中的元素不会进行修改,从而保证程序的正确性,在项目中可以更好地保存。

存在对一个对象的多次引用时,采用不可变类型是明智的,否则对该对象修改时,同时会改变其他几个类的引用,会出现大错。

三.通过final修饰可变类型为不可变类型

通过final修饰的类有以下三个特征:无法被继承、无法被覆盖以及重写、无法改变其引用。

四、String&StringBuilder看可变不可变

String:不可变数据类型
StringBuilder:可变数据类型

String s = "a";  s = s + "b";
//其中s指向了两个内存地址 ,一个地址中是“a” 另一个是 “ab”

StringBuilder sb = "a";   sb = "ab";
//StringBuilder是可变数据类型,更改它的时候sb始终指向一个位置

更改对象的值
不可变数据类型是在重新将引用指向一个新地址,新地址中为更改后的值。 可变数据类型则在原来的地址上直接更改对象值。

总的来说,基本数据类型和对象数据类型的变量均代表在栈内存中的一段存储空间,但不同的是,基本数据类型变量的对应空间直接存储数据,而对象数据类型变量的对应空间则存储其在堆内存中的地址,而在堆内存中存储数据。这就导致了二者的引用类型不同。

标签:StringBuilder,不可,数据类型,地址,内存,可变,mutable,immutable
From: https://www.cnblogs.com/zhh200442/p/18216821

相关文章

  • 数据类型
    //如果要对一个数据进行精确的操作,第一步就是判断它的数据类型//1.原始类型数值:整数,小数字符串,使用引号当定界符:"zhu"布尔值:false,trueundefined:未定义null:空typeof:专用于原始类型的检测如console.log(typrof100);//2.引用类型/对象//函数也是对象,函数......
  • Java语言程序设计1 第二章:变量、数据类型、运算符、表达式
    一、变量1.概念:        计算机中的一块内存空间,存储数据的基本单元2.变量的组成部分:        数据类型、变量名、数据3.语法:        (1)先声明,再赋值:       ·数据类型变量名;//声明                变量......
  • Go 基本数据类型
    Go基本数据类型上一篇:Go常量下一篇:运算符与表达式文章目录Go基本数据类型前言一Go数据类型二布尔类型`bool`三整数3.1有符号整数`int`3.2无符号整数`uint`3.3整数字面值四浮点类型4.1字面值4.1.1十进制浮点字面值4.1.2十六进制浮点字面值五复数......
  • 【从0到1学习Redis】数据类型 — String
    首先要先启动好服务,使用redis-cli进入到客户端。自增、自减和相加减操作自增1INCR自减1DECR步长i+=INCRBY字符串范围range截取GETRANGE替换SETRANGE是否存在设置过期时间setex(setwithexpire)不存在时再设置(在分布式锁中常常会使用!)setnx(set......
  • 汇编:数据类型
    基本数据类型1.字节(Byte):大小:8位(1字节)表示范围:0到255(无符号),-128到127(有符号)汇编定义:DB(DefineByte)示例:定义一个字节的值myByteDB0x1A   ;定义一个字节,值为0x1AmyByte2DB'A'   ;定义一个字节,值为字符'A'的ASCII码2.字(Word):大小:16位(2字节)表示范围:0......
  • JavaSE 数据类型以及基本转化与包装
    目录数据类型.1.基本类型(八个)数值型整型类型byte型:1字节8bit位第一位是符号位nullshort型:2字节int型:4字节long型:8字节浮点类型float:4字节double:8字节%%java浮点型默认为double类型%%字符型(char)2字节使用了Unicode编码兼容了Ascll码可以参与算术运算,本质是使用了Unicod......
  • 基本数据类型和字符串转换
    基本数据类型和字符串转换中8种包装类提供不同类型间的转换方式:Number父类中提供的6种方法。parseXXX()静态方法valueof()静态方法注意:需保证类型兼容,否则抛出NumberFormatException异常。源代码:publicclassDemo01{publicstaticvoidmain(String[]args){//基本数据类......
  • XML Schema 字符串数据类型及约束详解
    字符串数据类型用于包含字符字符串的值。字符串数据类型可以包含字符、换行符、回车符和制表符。以下是模式中字符串声明的示例:<xs:elementname="customer"type="xs:string"/>您文档中的一个元素可能如下所示:<customer>JohnSmith</customer>或者可能是这样的:<custome......
  • XML Schema 字符串数据类型及约束详解
    字符串数据类型用于包含字符字符串的值。字符串数据类型可以包含字符、换行符、回车符和制表符。以下是模式中字符串声明的示例:<xs:elementname="customer"type="xs:string"/>您文档中的一个元素可能如下所示:<customer>JohnSmith</customer>或者可能是这样的:<c......
  • python 基础习题3--数据类型和运算符
    1.  100/4+2*3 运行结果是 ()                    A、10B、81C、31D、50    E、31.02. Python 中的== 代表的是 (  )A、把左边的值赋值给右边;B、把右边的值赋值给左边 ;C、比较左右......