java字符串与数组比较_Java字符串与数组

问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.5字符串与数组

1、字符串创建与存储的机制是什么?

Java中字符串声明与初始化主要有两种情况:

(1)String s1 = new String("abc")与String s2 = new String("abc")语句

执行String s1 = new String("abc")语句,字符串池中不存在"abc",则会创建一个字符串常量"abc",

并将它添加到字符串常量池中,然后new String()会在堆中创建一个新的对象,s1指向堆中的String对象

紧接着创建String s2 = new String("abc")语句,因为字符串常量池中已经有了字符串常量"abc",所以

不会再创建"abc",直接new String()在堆中创建一个新的对象,然后使用s2指向这个对象

s1与s2指向堆中的不同String对象,地址自然也不相同

(2)String s1 = "abc"语句与String s2 = "abc"语句

在JVM中存在着一个字符串常量池,其中保存了着很多String 对象,s1,s2引用的是同一个常量池中的对象。

当创建一个字符串常量时,例如String s1 = "abc",会首先在字符串常量池中查找是否已经有相同的字符串被定义,

若已经定义,则直接获取对其的引用,此时不需要创建字符串常量

你可能感兴趣的:(java字符串与数组比较)