提个小问题,谁给讲讲String的+号运算的机制

seesea10523 2008-03-14 04:55:58
RT
...全文
115 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sean1203 2010-01-07
  • 打赏
  • 举报
回复
mark
chenzenan 2008-03-17
  • 打赏
  • 举报
回复
object调用toString()方法
ChDw 2008-03-17
  • 打赏
  • 举报
回复
有差别,你没有看到我上面的说明吗?

String c = "x" + "y" + a; 则编译器优化为new StringBuilder().append("xy").append(a);


所以 String t="strin"+"g";只会被编译器变成 String t = "string";因为编译器已经知道它的值,所以无谓再使用StringBuilder



如果是
String a = "strin";
String b = "g";
String c = a + b;才会变成 new StringBuilder().append(a).append(b).toString();


至于 你说的数值也可以参与+问题,也是StringBuilder支持的,new StringBuilder("str").append(1.23).toString()
seesea10523 2008-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ChDw 的回复:]
字符串的+全部是由编译器变换完成的

String a = "";
String b = "";

String c = a + b + 10; 被编译器改变为new StringBuilder().append(a).append(b).append(10).toString();

如果是String c = "x" + "y" + a; 则编译器优化为new StringBuilder().append("xy").append(a);
[/Quote]

private static String s ="string";
public static void main(String a[])
{
String t=new StringBuffer().append("strin").append("g").toString();
System.out.println(s==t);

}

这段代码和

private static String s="string";
public static void main(String a[])
{
String t="strin"+"g";
System.out.println(s==t);
}

这段代码是不是差不多呢?
seesea10523 2008-03-14
  • 打赏
  • 举报
回复
我问这个问题是因为我刚才有个小问题不明白,
http://topic.csdn.net/u/20080314/15/3881d605-f5fa-4f45-b723-11d0a455de1c.html
seesea10523 2008-03-14
  • 打赏
  • 举报
回复
有问题问ChDw

我有一个例子不是很明白
public class test
{
private static String s="string";
public static void main(String a[])
{
String t="strin"+"g";
System.out.println(s==t);
}
}
在String t="strin"+"g";运算的时候应该是引入了一个StringBuffer吧,
最后是调用StringBuffer的toString方法返回一个值给t。
但是我看源码StringBuffer的toString方法是new一个对象

这里打出来的为啥还是true呢?
kkkdyc 2008-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ChDw 的回复:]
引用 2 楼 healer_kx 的回复:
加号有啥好讲的,连接两个字符串为一个新字符串呗,Java唯一的一个重载了的运算符。OMG。



不可以说是重载,这个加号纯粹是编译优化,在JVM指令中是不支持字符串加号的
[/Quote]

+ 号本来是做数值运算的,但在string 里是字符串连接,这就是重载啊
ChDw 2008-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 healer_kx 的回复:]
加号有啥好讲的,连接两个字符串为一个新字符串呗,Java唯一的一个重载了的运算符。OMG。
[/Quote]


不可以说是重载,这个加号纯粹是编译优化,在JVM指令中是不支持字符串加号的
ChDw 2008-03-14
  • 打赏
  • 举报
回复
字符串的+全部是由编译器变换完成的

String a = "";
String b = "";

String c = a + b + 10; 被编译器改变为new StringBuilder().append(a).append(b).append(10).toString();

如果是String c = "x" + "y" + a; 则编译器优化为new StringBuilder().append("xy").append(a);
healer_kx 2008-03-14
  • 打赏
  • 举报
回复
加号有啥好讲的,连接两个字符串为一个新字符串呗,Java唯一的一个重载了的运算符。OMG。
霜之哀伤 2008-03-14
  • 打赏
  • 举报
回复
机制?
什么意思。

62,615

社区成员

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

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