java中String对象的存储位置
程序员文章站
2023-11-06 10:30:16
转载注明出处:https://www.cnblogs.com/carsonwuu/p/9752949.html 本次样例中使用6个test直接演示String对象的创建位置:堆、栈、常量池。 ......
转载注明出处:https://www.cnblogs.com/carsonwuu/p/9752949.html
本次样例中使用6个test直接演示string对象的创建位置:堆、栈、常量池。
package test.string.equal; public class main { /** 创建了三个对象,"helloworld对象创建在常量池中",每次new string()都会创建一个对象在堆内存中工两个堆对象。 * */ void test() { string s1= new string("helloworld"); string s2= new string("helloworld"); } /**程序只创建一个字符串对象“java”,存放在常量池中,所以s1==s2 为true * */ void test1(){ string s1="java"; string s2="java"; system.out.println(s1==s2); } /** 第一个new string("java"):创建了两个对象,java创建于常量池中,string对象创建于堆内存中。 * 第二个new string("java"):由于常量池中有java对象,所以只需创建一个对象,string对象创建于堆内存中。 * s1与s2分别指向string对象堆内存,所以s1==s2 为false */ void test2() { string s1=new string("java"); string s2= new string("java"); system.out.println(s1==s2); } /** 常量的值在编译的时候就确定了,"hello"、"world"都是常量,因此s2的值在编译的时候也确定了, * s2指向常量池中的"hello world",所以s1==s2为true * */ void test3() { string s1="hello world"; string s2="hello "+"world"; system.out.println(s1==s2); } /** s4由两个string变量相加得到,不能再编译时就确定下来,不能直接引用常量池中的"helloworld"对象,而是在堆内存中创建一个新的string对象并由s4指向 * 所以s1==s4为false * */ void test4() { string s1="helloworld"; string s2="hello"; string s3="world"; string s4=s2+s3; system.out.println(s1==s4); } /** s2与s3被final修饰为宏变量,不可更改,编译器在程序使用该变量的地方直接使用该变量的值进行替代,所以s4的值在编译的时候就为"helloworld" * 指向常量池中的"helloworld"对象 * 所以s1==s4为true * */ void test5() { string s1="helloworld"; final string s2="hello"; final string s3="world"; string s4=s2+s3; system.out.println(s1==s4); } public static void main(string[] args) { main o = new main(); o.test1(); o.test2(); o.test3(); o.test4(); o.test5(); } }
推荐阅读
-
java中String对象的存储位置
-
Java中String、StringBuffer、StringBuilder的区别(转)
-
Java中对象数组的使用方法详解
-
php面向对象中static静态属性与方法的内存位置分析
-
java中List对象的操作方法和List对象的遍历
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法
-
MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法
-
浅谈Java虚拟机内存中的对象创建,内存布局,访问定位
-
Java中拼接字符串String的N种方法总结