操作符“+”的定义,他是否是new了一个新的字符串?

caocongteng 2008-04-15 12:34:26
final String str1 = "length: 10";
final String str2 = "length: "+pig.length();

我现在可以确定str1==str2为false;
我知道String池的特性
但想知道连接操作符“+”的定义,他是否是new了一个新的字符串?还是什么?
望达人指点!
...全文
1831 72 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
火龙果真可以啊。。。讲的这么本质!解了我心中的一个迷啊,谢谢了!!
lichao20073877 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)
本课程采用了漫画+动手实操+练习讲授Python编程技能。课程简介:第6章 容器类型数据6.1 序列6.1.1 序列的索引操作6.1.2 加与乘操作6.1.3 切片操作6.1.4 成员测试6.2 列表6.2.1 创建列表6.2.2 追加元素6.2.3 插入元素6.2.4 替换元素6.2.5 删除元素6.3 元组6.3.1 创建元组6.3.2 元组拆包6.4 集合6.4.1 创建集合6.4.2 修改集合6.5 字典6.5.1 创建字典6.5.2 修改字典6.5.3 访问字典视图6.6 动动手 —— 遍历字典6.7 练一练第7章 字符串7.1 字符串的表示方式7.1.1 普通字符串7.1.2 原始字符串7.1.3 长字符串7.2 字符串与数字的相互转换7.2.1 将字符串转换为数字7.2.2 将数字转换为字符串7.3 格式化字符串7.3.1 使用占位符7.3.2 格式化控制符7.4 操作字符串7.4.1 字符串查找7.4.2 字符串替换7.4.3 字符串分割7.5 动动手 —— 统计英文文章中单词出现的频率7.6 练一练第8章 函数8.1 定义函数8.2 调用函数8.2.1 使用位置参数调用函数8.2.2 使用关键字参数调用函数8.3 参数的默认值8.4 可变参数8.4.1 基于元组的可变参数( *可变参数)8.4.2 基于字典的可变参数( **可变参数)8.5 函数中变量的作用域8.6 函数类型8.6.1 理解函数类型8.6.2 过滤函数filter()8.6.3 映射函数map()8.7 lambda()函数8.8 动动手 —— 使用更多的lambda()函数8.9 练一练第9章 类与对象9.1 面向对象9.2 定义类9.3 创建对象9.4 类的成员9.4.1 实例变量9.4.2 构造方法9.4.3 实例方法9.4.4 类变量19.5 封装9.5.1 私有变量9.5.2 私有方法9.5.3 使用属性9.6 继承性9.6.1 Python中的继承9.6.2 多继承9.6.3 重写方法9.7 多态性9.7.1 继承与多态9.7.2 鸭子类型测试与多态9.8 练一练第10章 异常处理9.8 练一练10.1 第一个异常 —— 除零异常10.2 捕获异常110.2.1 try-except语句10.2.2 多个except代码块10.2.3 多重异常捕获10.2.4 try-except语句嵌套10.3 使用finally代码块释放资源10.4 自定义异常类10.5 动动手 —— 手动引发异常10.6 练一练

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧