String常量池

9 篇文章 0 订阅

package com.company;

public class test7 {
public static void main(String[] args) {
//使用构造方法创建字符串
String s1=new String(“aaa”);//存放在堆中,强制在堆内存中开辟一块新空间(只要是new出来的,必须会在堆中分配新的内存)
s1=new String(“bbb”);//由于aaa不再被任何引用所指向,所以会被gc回收
//使用双引号直接创建
String s2=“aaa”;//字符常量,存放在常量池中
s2=“bbb”; //内存的常量池中会有两个String对象,分别是aaa和bbb,且不会被gc回收
//System.out.println(s2);

    //多次出现的相同字符常量,只会在常量池中创建一个String对象
    String s3="bbb";//创建流程:先判断常量池是否有bbb,如果有则直接指向常量池中的bbb,如果没有则在常量池中创建bbb
    System.out.println(s3==s1);//false
    System.out.println(s3==s2);//true
    String s4=new String("bbb");
    System.out.println(s4==s1);//false
    System.out.println(s4==s2);//false

    //问题1
    String s5="bb";
    String s6="b";
    String s7=s5+s6;//s7不是字符常量,不是使用双引号直接创建的字符串,而是在运行时计算得到的
    System.out.println(s7==s2);//false

    //问题2
    String s8="bb"+"b";//s8是字符常量,对于常量和常量的运算,在编译期已经得到了值(编译器做了优化)
    System.out.println(s8==s2);//true


    //问题3
    String s9=s5+"b";//s9不是字符常量,在编译期无法确定s9的值
    System.out.println(s9==s2);//false


    //问题4:共创建了多少个对象? 9个



        }

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值