Java与Python的可变与不可变变量(类型)

Java与Python的”可变“与”不可变“变量(类型)的不同。
我的博客地址:http://www.changmeng.top/

Java

Java中,基本数据类型(如int、double和char等)是不可变的,一旦被定义和初始化就不能再改变它们的值。

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

创建不可变数据类型

例如,以下代码创建了一个整数变量x,该变量的初始值为5:

int x = 5;

你无法更改x的值,但你可以重新分配新的值给新的变量:

int y = x + 10; // y is now 15

对于引用数据类型,Java中的不可变类型包括String和所有其他的包装类(例如Integer、Double等),它们都是final类型。这意味着它们一旦被创建后,其内容就不能被修改。以下代码展示了使用字符串创建一个不可变对象:

String str = "hello";

如果要更改字符串,必须重新分配新的字符串变量,例如:

String newStr = str + " world"; // newStr is now "hello world"

创建可变数据类型

可变类型包括数组和自定义对象(如ArrayList、HashMap等)。这些变量可以通过添加、删除和更改元素来修改它们的内容。

例如,创建可变数据类型:StringBuilder

StringBuilder sb = new StringBuilder("a");   
sb.append("b");	// "ab"

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

验证

public class MyClass { 
    public static void main(String[] args) {
        String str1 = "a";
        int hashCode = str1.hashCode();
        System.out.println("The hash code of the string \"" + str1 + "\" is: " + hashCode);
        str1 = str1 + "b";
        hashCode = str1.hashCode();
        System.out.println("The hash code of the string \"" + str1 + "\" is: " + hashCode);

        StringBuilder str2 = new StringBuilder("a");
        hashCode = str2.hashCode();
        System.out.println("The hash code of the string \"" + str2 + "\" is: " + hashCode);
        str2.append("b");
        hashCode = str2.hashCode();
        System.out.println("The hash code of the string \"" + str2 + "\" is: " + hashCode);
    }
} 

在这里插入图片描述

Python

与Java不同,Python变量的类型是动态推断的,并且所有的变量都是对象。在Python中,不可变变量包括数字、字符串和元组,而列表、字典和集合是可变的。

不可变变量(immutable variable):就是内存中内容不可以被修改的变量。当你创建一个不可变变量时,Python解释器会在内存里找是否已经创建过这个值,如果就就将已有的值赋值它,所以不可变变量的相同值是同一个地址。
可变变量(mutable variable):内存中内容可以被修改的变量。当你创建一个可变变量时,Python解释器不管是否已经创建过这个值,它都会开辟一个新的空间创建了一个新的值赋予。

以下代码创建了一个整数对象x,其初始值为5:

x = 5

与Java一样,你无法更改x的值,但你可以重新赋予新值:

y = x + 10 # y is now 15

Python字符串也是不可变的。以下代码演示了创建一个名为str的字符串变量:

str = "hello"

不可变变量的创建

x = 1

将刚才就创建好的1赋值给y。

python解释器会判断1在内存中是否存在,若不存在,python会分配内存,在内存中创建数字1,然后看变量x是否存在,若不存在就创建x,最后把1赋值给x。

y = 1

我们可以通过id或者is来判断是否在内存中是同一个地址。

print(id(x) == id(y))
# or 
print(x is y)

在这里插入图片描述

可变变量的创建

a = [1,2,3]

python解释器不管内存有没有[1,2,3],都会重新在内存中开辟了一块新的空间,创建了一个新的[1,2,3]。

b = [1,2,3]

我们可以通过id或者is来判断是否在内存中是同一个地址。

a = [1,2,3]
b = [1,2,3]
print(id(a) == id(b))

在这里插入图片描述

参考

文章作者: 长梦
文章链接: http://www.changmeng.top/Java%E4%B8%8EPython%E7%9A%84%E5%8F%AF%E5%8F%98%E4%B8%8E%E4%B8%8D%E5%8F%AF%E5%8F%98%E5%8F%98%E9%87%8F%EF%BC%88%E7%B1%BB%E5%9E%8B%EF%BC%89/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
长梦!

Python中可变变量与不可变变量详解

Java数据类型的可变与不可变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值