每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?

简介: 每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?

String str="i"与 String str=new String(“i”)一样吗?

要想知道二者是否一样,我们只需要通过==进行比较,为什么不用equals的原因,大家可以认真阅读这篇文章

测试代码如下:

 public class Test1 {
     public static void main(String[] args) {
        String str1="i";
        String str2=new String("i");
        System.out.println(str1==str2);
     }
}

运行结果如下:

它们的的值都是为"i",为什么结果为false呢?

原因为如下:


String str="i";是采用字符串常量的方式创建对象,在Java中,String类型的对象使用率非常高,但我们在编写程序的过程中,主要关心的是String对象的值,为了避免频繁的创建与销毁String对象,JVM为了提升性能和减少内存开销,在内存中维护了一段特殊的空间称为字符串对象池,它的工作原理是这样的,创建一个字符串时,JVM首先会检查字符串常量池中是否有值相等的字符串,如果有,则不再创建,直接返回该字符串的引用地址,若没有,则创建,然后放至字符串常量池中,并返回新创建的字符串的引用地址,但是字符串对象池只对字符串常量的方式创建字符串对象适用。


而String str=new String(“i”)采用的是构造方法的方式创建字符串对象,new关键字会在堆内存开辟空间,即使已经存在具有相同字符序列的字符串常量,它还是会创建一个新的字符串对象。


由于二者创建对象方式的不同导致创建出的对象,虽然值相同,但并不是同一个对象,因此它们并不一样!

相关文章
|
4月前
|
Java
每日一道面试题之String常用的方法有哪些?
每日一道面试题之String常用的方法有哪些?
|
4月前
|
存储 缓存 安全
【面试题精讲】String 为什么是不可变的?
【面试题精讲】String 为什么是不可变的?
|
5月前
|
存储 缓存 安全
String、StringBuffer和StringBuilder的区别(面试题)
String、StringBuffer和StringBuilder的区别(面试题)
62 0
|
4月前
|
Java
每天一道面试题之String属于基础数据类型吗?
每天一道面试题之String属于基础数据类型吗?
|
1月前
|
SQL 缓存 安全
大厂面试题:垃圾回收与String
大厂面试题:垃圾回收与String
16 2
|
1月前
|
存储 NoSQL Java
面试题:redis除了使用string、set还了解哪些类型
面试题:redis除了使用string、set还了解哪些类型
10 0
|
5月前
|
Java 程序员 编译器
new String(“hello“)之后,到底创建了几个对象?
最近,有很多优秀的程序员从大厂毕业, 再加上大环境的影响,很多正在找工作的小伙伴也感觉技术面试越来越难,基本上都会问技术底层原理,甚至有些还会问到操作系统层面的知识。 如果技术功底不扎实,确实很难找到合适的岗位。
53 0
|
2月前
|
存储 Java 编译器
【Java进阶篇】String str = new String(“AAA“) 创建了几个对象?
String str = new String(“AAA“) 创建了几个对象?
28 0
|
2月前
|
Java
Java面试题_String 相加
Java面试题_String 相加
13 0
|
2月前
|
存储
String你知道多少细节(含面试题)
String你知道多少细节(含面试题)
19 0

相关产品

  • 云迁移中心