纠错——字符类型是否可变


上一篇博客说到最近在学Python,其中有不少数据类型是不可变的,即赋新值以后会开辟新空间。与之前学习的Java对比,我错误的提到了字符。

在今天继续学习Py的过程当中我突然好奇“为什么Python中的String字符类型是不可变的”,搜索相关博客,看到一篇博客粘贴Java教学书上的原文。

String str = “Html”;
str = "HTML";

这个时候str已经不是原来的对象了。对此我专门做了一个小测试。

package com.Cra2iTeT;

/**
 * @author Cra2iTeT
 * @version 1.0
 * @date 2022/3/20 15:39
 */
public class test {
    public static void main(String[] args) {
        String str = "11";
        String str2 = str;

        System.out.println("str=>" + str + "\tstr2=>" + str2);
        if (str == str2) {
            System.out.println("---");
        }

        str = "22";

        System.out.println("str=>" + str + "\tstr2=>" + str2);
        if (str == str2) {
            System.out.println("===");
        }
    }
}

第二个if语句条件为false。调试查看得到的地址也不相同。

这也说明了Java当中的String类型数据其实也是不可变的,当你要做变换的时候,JVM就已经帮你们改变了引用地址,所以使用起来觉得String类型可变,基础不牢。

结论:Python和Java中String类型都是不可变数值类型。