kbhao7788 2017-04-05 01:51 采纳率: 0%
浏览 821

java 堆内存的问题解决一下

String str=new String("hfeighioegh");

程序从右向左第一个是"hfeighioegh"申请了堆空间这个堆空间和"hfeighioegh"的地址相等吗

第二个堆空间是new出来的地址上string变量的值被赋值为"hfeighioegh"是这样解释吗

  • 写回答

2条回答 默认 最新

  • Seraphim_Fly 2017-04-05 02:21
    关注

    不是 如果你是new出来的 那么会在堆中分配出内存来存放这个对象 只用一个堆空间, 如果你是 String str = "hfeighioegh" 那么会在字符串常量池中开辟
    一个内存来存放这个字符串,同时 str存放的地址指向这个字符串,堆中还是只用一个。 不过每次new都是新的,但是 如果是第二种方式会先检测常量 池中
    是否存在 你要的字符串,如果存在则指向常量池中的地址。

         String s1 = "abcd";
            String s2 = "abcd";
            System.out.println(s2==s1);
            String s3 = new String("abcd");
            System.out.println(s3==s1);
    

    第一个结果为 true ,第二个为false.

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!