社区
Java SE
帖子详情
求教大神两个关于String常量的程序输出问题!
xcj20
2014-02-12 02:50:12
这个程序输出的是true
这个输出的是false ,求这两个程序各自对字符串常量的赋值方式为什么使结果不一样?
...全文
596
9
打赏
收藏
求教大神两个关于String常量的程序输出问题!
这个程序输出的是true 这个输出的是false ,求这两个程序各自对字符串常量的赋值方式为什么使结果不一样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ningbohezhijun
2014-02-12
打赏
举报
回复
我的理解是这样的: 第一个例子输出为true,是因为第一种写法在编译期间就可以确定String s的值了,因为A,B都是用final修饰的。所以String s会放到常量池 而第二个例子中A,B都是放在静态初始化块中的,静态初始化块是当这个类第一次被JVM加载的时候执行的。 而第一次被JVM加载是运行时的时候了,所以不会放到常量池中。所以为false.
若鱼1919
2014-02-12
打赏
举报
回复
javap看一下字节码就知道怎么回事了
raistlic
2014-02-12
打赏
举报
回复
引用 5 楼 lingang0607 的回复:
第一个在编译期就已确定了,第二个只能通过运行后才能确定,所以是两个全新的对象
+1 http://www.coderanch.com/t/454384/java/java/compile-time-constant
微笑生活LG
2014-02-12
打赏
举报
回复
第一个在编译期就已确定了,第二个只能通过运行后才能确定,所以是两个全新的对象
oh_Maxy
2014-02-12
打赏
举报
回复
好绕啊。。 个人的简单理解是这样的: 第一个情况是因为在执行静态方法main的时候,常量A、B明确,因此等同于"ab"+"cd"操作。 第二个情况,在执行静态方法main的时候,常量A、B不明确,通过执行static静态块的时候得到,此时A、B被当做变量处理了,效果等同于: String A = "ab"; String B = "cd"; String s = A+B; ...
枫醉秋
2014-02-12
打赏
举报
回复
第二个 就是两个全新的对象了,肯定是false了
枫醉秋
2014-02-12
打赏
举报
回复
第一个true的原因是 字符常量取已经存在了 abcd的对象。在String t="abcd";的时候就不会再创建新的对象所以两个引用是相等的。
shijun199006
2014-02-12
打赏
举报
回复
其实它们输出的值是一样的,只是比较的方法不一样,导致一个是true一个是false,用equals比较的话,输出的都是true
JVM-
String
常量
池与运行时
常量
池
Start with JVM 先分析一波
常量
池-Constant Pool
从字符串到
常量
池,一文看懂
String
类
从字符串到
常量
池,一文看懂
String
类设计 从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象?
String
s3 = new
String
("1"); 是的,没错,我确实要从这里开始 这道题就算你没做过也肯定看到,总所周知,它创建了
两个
对象,一个位于堆上,一个位于
常量
池中。 这个答案粗看起来是没有任何
问题
的,但是仔细思考确经不起推敲。 如果你觉得我说的不对的话,那么可以思考下面这
两个
问题
你说它创建了
两个
对象,那么这
两个
对象分别是怎样创建的呢?我们回
String
变量与
String
常量
相加
问题
String
变量与
String
常量
相加
问题
public static void main(
String
[] args) {
String
MESSAGE = "taobao";
String
a = "tao" + "bao";
String
b = "tao";
String
c = "bao";
String
d = b+c; System.out.println(a == M...
Java中
String
和字符串
常量
池
本文简单讲解Java中那些
String
引用和字符串
常量
池的关系 什么是
String
什么是字符串
常量
池
String
根据源码可知,字符串
String
对象的底层是char[]数组来存储数据,也就是
String
对象中包括了char[]数组对象。 public final class
String
implements java.io.Serializable, Comparable<
String
>, CharSequence { /** The value is used for
String
String
Builder
String
Buffer【
常量
池相关】
参考:
String
,
String
Buffer与
String
Builder的区别_黎明前的准备-CSDN博客_
string
buffer和
string
builder JAVA
常量
池,一篇文章就足够入门了。(含图解)_人在江湖-CSDN博客_
常量
池 1. 字符串
常量
池
String
a = "abc";
String
b = new
String
("abc"); System.out.println(a == b); ----*---- 结果:false "abc"是在
常量
池中,new .
Java SE
62,622
社区成员
307,256
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章