Java中字符串的两种初始化理解

mac2026-04-04  5

java中创建并初始化一个String对象,最常见的方式有两种: String str=new String(“XXX”); String str=”XXX”; 二者看似相同,其实有很大的差别。 前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象; 后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在”XXX”,如果没有,则将”XXX”存放字符串池,并令引用变量str指向它;如果已经有”XXX”,则直接令str指向它。 后者会有风险,如果说这个字符串已经在字符串池中出现,那么再创建的时候不会新建一个串,而是直接指向现有的串,那么对于这个串的修改可能会影响到其他的string内容。 现在举一个比较直观的例子: string a = ”逆向小白“; string b = ”逆向小白“; string c = new string(”逆向小白“); string d = new string(“逆向小白”); 用==判断 a和b c和d 结果是前者true 后者false new能保证每次创建一个新的内存空间。

这里在引出一个字符串数组的创建方式: String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","",""};

最新回复(0)