在java中,有两种创建String类型变量的方法。
String str01='abc '; //第一种方式
stringstr02=newstring(ABC ); //第二种方式
第一种方法创建字符串变量时,首先检查JVM方法区域的字符串常量池中是否有存储“abc”的地址,如果有,则指向该地址,如果没有,则将存储文字“abc”的地址作为方法区域
如果使用第二种方法创建String变量,请创建在堆中包含“abc”的对象,以使变量str02指向堆中的对象。
根据上述创建方法,我们来看看以下示例。
String str01='abc ';
String str02='abc ';
stringstr03=newstring(ABC );
stringstr04=newstring(ABC );
system.out.println (STR01==str023360 ) ) ST r01==str 02 );
system.out.println (str03==str043360 ) ) str 03==str 04 );
system.out.println (STR01==str0: ) ) ST r01==str 03 );
分析:
1、创建str01时,如果在方法区域的字符串常量池中没有存储“abc”的地址,则创建在常量池中存储“abc”的地址,以使变量str01指向该地址。 创建str02时,字符串常量池中已存在包含“abc”的地址,并将str02变量指向该地址。 此时,由于str01和str02指向相同的存储器地址,因此' str01==str02 '为真。
2、使用new关键字创建对象时,每次都会在堆中创建新对象,因此str03和str04指向对象的地址不同,' str03==str04 '为false。
3、因为str01指向方法区域,str03指向堆,所以' str01==str03 '为false。
String对象被设计为不可更改的对象。 也就是说,如果字符串对象中的文字值发生更改,则会使用原始地址创建新地址,并创建新对象。
String str01='abc ';
String str02='abc ';
str01='def ';
创建在方法区域的字符串常量池中存储新“def”的地址。 str01指向该地址,str02的方向不变。
以上基于String变量的两种创建方法(详细信息)是编辑共享给大家的所有内容。 希望能作为参考。 另外,我想支持编剧。