2 qq 33833831 qq_33833831 于 2016.02.17 15:29 提问

关于字符串常量池的问题
String s1="hello";
String s2="world";
String s3="helloworld";
System.out.println(s3.equals((s1+s2))); 

存在几个helloworld?
如果此时将helloworld赋值给变量s5 则赋值的是哪一个helloworld

6个回答

qq_18748427
qq_18748427   2016.02.17 16:41
已采纳

字符串常量会存在常量池里,每定义一个字符串,都会先查看常量池,如果有,就直接使用已有的,没有才定义,所以从开始到结尾只有一个helloworld。
为什么4楼的结果是false,因为比较的是c和d的地址。
如果是System.out.println("helloworld"=="hello"+"world");则是true。

qq233379516
qq233379516   2016.02.17 15:36

2个helloworld
s3

qq_23660243
qq_23660243   2016.02.17 16:22

图片说明 不明白二楼说的 string字符串不属于常量吧 这里指向很明显是不同的

qq_33833831
qq_33833831 c d本质是对象 字符串的内容的确是常量 储存在方法区的字符串常量池
2 年多之前 回复
qq_33833831
qq_33833831 ==比较的是地址值 String
2 年多之前 回复
bdmh
bdmh   Ds   Rxr 2016.02.17 15:50

常量字符串在常量区,多个变量都会指向它,所以对于同一个字符串,常量区只有一个

github_31700487
github_31700487   2016.02.17 16:36

正如二楼所说,同样的字符串在常量区只有一个。那么回答楼主的问题:1,只存在一个“helloword”字符串,变量s3指向它,变量(s1+s2)的值也指向它。2,将”helloword“赋值给变量s5,变量s5也同样指向常量区已存在的“helloworld”字符串。

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.17 21:41

这个是常见的面试题,你操作下看看

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java字符串常量池
开篇同学们面试的时候总会被问到字符串常量池的问题吧?如果你是死记硬背的答案,那么我想看了我这篇文章,你应该以后能胸有成竹了跟着Alan,走起!1. 享元模式其实常量池这个问题涉及到一个设计模式,叫“享元模式”,顾名思义 - - - > 共享元素模式也就是说:一个系统中如果有多处用到了相同的一个元素,那么我们应该只存储一份此元素,而让所有地方都引用这一个元素Java中String部分就是根据享元模式设
Java常量池的面试题 Integer Cache
一道很让人头疼的Java面试题。好像也不太像面向应届生的题目,不过里边一些了解一下还是不错的。 今天My partner问我一个让他头疼的Java question,求输出结果: /**  *   * @author DreamSea 2011-11-19  */ public class IntegerTest {     public static void m
字符串常量池、堆、栈
String a="a"+"b"+"c" 创建了几个对象这个问题涉及到了字符串常量池和字符串拼接String a="a"+"b"+"c"通过编译器优化后,得到的效果是String a="abc"Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid
Java基础之jdk1.8 JVM内存模型简述,含String常量池简单分析
最近有个机会整理JAVA基础相关知识,整理到JVM内存模型这部分的时候,画了两张图,记载在此,供感兴趣的新手参考。
一个关于字符串常量池的问题
看一个例子 public class Test4 { public static void main(String[] args) { String s1 = "b"; String s2 = "a"; String s3 = s1 + "d"; String s4 = "e" + "f"; String s5 = s1 + s2; } } 问题是,现在字符串常量池
Java中的字符串常量池详细介绍
JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被称为字符串常量池。 java中字符串对象创建有两种形式,一种为字面量形式,如String str=" tst",另一种就是使用标准的构造对象的方法,如String str=new String("tst"); ,这两种经常使用,在内存上面有一些区别。这一切都是JVM为了减少字符串对象重复创建,其维护了一个特殊的内存,
Java中的常量池(字符串常量池、class常量池和运行时常量池)
简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN、博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与大家共同探讨: 在Java的内存分配中,总共3种常量池:1.字符串常量池(String Constant Pool):1.1:字符串常量池在Java内存区域的哪个位置? 在JDK6.0及之前版本,字符串
java 字符串常量池
试题一、String s = new String("abc")创建了几个对象? String s = new String("abc")实际上是"abc"本身就是字符串池中的一个对象,在运行 new String()时,把字符串池的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在字符串池中,一个在堆中。(注:我们假设的是字符串池中默认是没有abc字符
常量池、运行时常量池、字符串值基本概念区分
常量池(Constant Pool):常量池数据编译期被确定,是Class文件中的一部分。存储了类、方法、接口等中的常量,当然也包括字符串常量。字符串池/字符串常量池(String Pool/String Constant Pool):是常量池中的一部分,存储编译期类中产生的字符串类型数据。(JDK1.6及1.6之前字符串常量池在方法区中,JDK1.7及1.7之后字符串常量池在堆中)运行时常量池(R
string字符串常量池在内存中的位置
这里只是举个简单的例子说明字符串常量池在内存中的位置。     闲言少叙,直接上代码。   Java代码   "font-size: large;">import java.util.ArrayList;    public class Test {        public static void main(String[] args) {          Strin