String相关经典面试题

一、JVM 常量池中存储的是对象还是引用呢

答:String类型存放的是对象的引用
当字符串不存在的时候,会在堆中创建字符串对象,然后再在字符串常量池当中创建这个引用(常量池指向堆中的字符串)。

在这里插入图片描述
参考链接:JVM 常量池中存储的是对象还是引用呢?
摘录:如果您说的确实是runtime constant pool(而不是interned string pool / StringTable之类的其他东西)的话,其中的引用类型常量(例如CONSTANT_String、CONSTANT_Class、CONSTANT_MethodHandle、CONSTANT_MethodType之类)都存的是引用,实际的对象还是存在Java heap上的。

二、字符串拼接

String 类型的变量和常量做“+”运算时发生了什么?
注意:用 == 比较的时候,比较的是地址值是否相等,可以理解为判断是否指向了同一个对象。

三、String#intern 方法有什么作用

String.intern() 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况:

  • 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用
  • 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。(不会再新建一个字符串对象了)

四、创建对象个数

1.String str = “abc”;这句话创建了几个字符串对象?

答:0个或1个对象。
创建字符串“abc"时会先在字符串池中查找,看是否有相等的对象引用,没有的话就在堆中创建“abc”字符串对象,同时把地址驻留在字符串池,这个时候会创建一个对象;有的话则直接赋值为常量池中的引用,避免重复创建字符串对象,这个时候会创建0个对象。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值