社区
Java SE
帖子详情
操作符“+”的定义,他是否是new了一个新的字符串?
caocongteng
2008-04-15 12:34:26
final String str1 = "length: 10";
final String str2 = "length: "+pig.length();
我现在可以确定str1==str2为false;
我知道String池的特性
但想知道连接操作符“+”的定义,他是否是new了一个新的字符串?还是什么?
望达人指点!
...全文
2136
72
打赏
收藏
操作符“+”的定义,他是否是new了一个新的字符串?
final String str1 = "length: 10"; final String str2 = "length: "+pig.length(); 我现在可以确定str1==str2为false; 我知道String池的特性 但想知道连接操作符“+”的定义,他是否是new了一个新的字符串?还是什么? 望达人指点!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
72 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhch152
2012-06-25
打赏
举报
回复
[Quote=引用 42 楼 的回复:]
为了加深理解,我们可以来做几个小实验。
javac Test 编译文件
javap -c Test 查看虚拟机指令
实验一:纯字符串
Java code
public class Test {
public static void main(String args[]) {
String str = "a";
}
}
//……
[/Quote]
//b 不是在常数池里面吗,这里的栈是指常数池了的栈吗? 还有复制出来,指的是复制到哪里??
codeshuo
2010-09-16
打赏
举报
回复
火龙果真可以啊。。。讲的这么本质!解了我心中的一个迷啊,谢谢了!!
公孙先生展护卫
2010-07-17
打赏
举报
回复
mark
timeriver_wang
2010-03-09
打赏
举报
回复
受益匪浅啊,mark
cdsn09
2010-01-06
打赏
举报
回复
火龙果果然很强大
wifewifewife
2009-11-02
打赏
举报
回复
mark..
monsterfairy
2009-10-14
打赏
举报
回复
[Quote=引用 5 楼 caocongteng 的回复:]
我理解错了
String str1 = "haha";
String str2 = "ha"+"ha";
System.out.println(str1==str2);
返回true;
说明 + 操作符并没有生成新的对象,问题在str1.length()这里
大家都说说吧!
[/Quote]
String str1 = "haha"; //这里在编译期时就放到了池子里
String str2 = "ha"+"ha"; // 这里会先拼成"haha" 然后去池子里找,如果找到了,就用,如果找不到,就new(分配内存)个新的,放入池中。
这里能找到,所以下面这句为True
System.out.println(str1==str2); //true 除了名字不一样外,其他都一样(内存地址)所以返回true
String s1 = "ha" //这里同理也会到池里找,没有new一个新的放到池里,这里会放一个ha到池里。
String s2 = "ha" //这里找,有,用池里的,同时s1,s2引用相同地址,除了名字不一样外,其他都一样
final String str1 = "length: 10"; // 没有,放到池里。
以上都在编译期做的事情,常量,会放到池子里。
final String str2 = "length: "+str1.length(); //这里不是在编译期做的事情,是存在Heap中的。
str1 和 str2 引用不同的地址,new一个"length: "+str1.length()放到Heap中,并用str2指向新地址。
monsterfairy
2009-10-14
打赏
举报
回复
String str1 = "haha";
String str2 = "ha"+"ha";
System.out.println(str1==str2);
leafin
2009-03-06
打赏
举报
回复
marked by leafin
luojihaidao
2009-02-05
打赏
举报
回复
不错!
lyx_0010
2009-02-04
打赏
举报
回复
学习
bigbro001
2009-01-13
打赏
举报
回复
记号。。。
sjbtwo
2008-12-24
打赏
举报
回复
太强大了。。。学习。。。。感觉收益很大。。
FranklinKing
2008-12-23
打赏
举报
回复
还是有些迷糊
jlabel
2008-12-22
打赏
举报
回复
已阅
Neves_pa
2008-12-22
打赏
举报
回复
好帖子,该顶
hl_ghost
2008-11-22
打赏
举报
回复
mark
clwahaha
2008-11-01
打赏
举报
回复
[Quote=引用 53 楼 lwyx2000 的回复:]
火龙果很强大也很好吃~~~
[/Quote]
呼呼
「已注销」
2008-10-15
打赏
举报
回复
mark
lwyx2000
2008-10-07
打赏
举报
回复
火龙果很强大也很好吃~~~
加载更多回复(51)
[C++] 关于
new
操作符
的重载
关于c++
new
操作符
的重载 你知道c++ 的
new
操作符
和operator
new
的区别么?也许你还会问,他们有区别吗? 当你写下面这样的代码时, string *pa =
new
string("memory managerment"); 你使用的是
new
操作符
,这个
操作符
和sizeof一样,是c++语言级别支持的。你不能改变它的语义,它做的事情总是不变的:分配足够的内存以容纳对象,然后调...
操作符
“+”的
定义
,他
是否是
new
了一…
摘录来自CSDN论坛:http://bbs.csdn.net/topics/220015609 为了加深理解,我们可以来做几个小实验。 javac Test 编译文件 javap -c Test 查看虚拟机指令 实验一:纯
字符串
Java code: public class Test { public static void main(String args[])
c++
new
操作符
的重载
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章