社区
Java SE
帖子详情
提个小问题,谁给讲讲String的+号运算的机制
seesea10523
2008-03-14 04:55:58
RT
...全文
115
11
打赏
收藏
提个小问题,谁给讲讲String的+号运算的机制
RT
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
机制?
什么意思。
C++
string
用法详解(内部实现)
C++
string
用法详解 C++
string
详解 任何人对本文进行引用都要标明作者是Nicolai M.Josuttis /////////////////////////////////////////////////////////////////////////////////// C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C
String
str = new
String
("abc")到底创建几个
String
对象
String
str=new
String
("abc"); 紧接着这段代码之后的往往是这个
问题
,那就是这行代码究竟创建了几个
String
对象呢?相信大家对这道题并不 陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建
String
对象相关的一些 JAVA知识。 我们可以把上面这行代码分成
String
str 、= 、 "abc"...
Java:面试题:
String
s=new
String
("abc")创建了几个对象?
String
str=new
String
("abc"); 紧接着这段代码之后的往往是这个
问题
,那就是这行代码究竟创建了几个
String
对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个。 接下来我们就从这道题展开,一起回顾一下与创建
String
对象相关的一些JAVA知识。 我们可以把上面这行代码分成
String
str、=、"abc"和new
String
()四部分来看待。St...
C# ++
运算
符的重载
很多语言都允许程序员使用
运算
符重载,尽管从编程的角度看,这没有其必要性,但是对于代码来讲可以提高它的可读性,带来许多方便之处。最简单的例子就是,我们用
String
类的时候,用“+”
运算
符直接实现字符串的连接,很方便很直观。虽然,Java不允许重载
运算
符,但是在它在类库级别上也重载了
String
类的“+”
运算
符。C#和C++一样,提供了
运算
符重载
机制
。但是,它的要求要严格一些,这里提一下C#中自增
运算
符“++”的重载使用。在C++中,要体现前置++
运算
,总是要给其添加一个int类型的参数,尽管我们用不上它。在
【C++初阶:STL ——
string
】
string
类 | 浅拷贝和深拷贝(传统写法和现代写法) |
string
类的模拟实现
到这里我们就要学会能自己能看文档了,因为就这个
string
类来说就有一百多个接口函数,那肯定记不住呀,我们平时用的大概就二十个,一般我们都是学习它比较常用的,其它的大概熟悉它们有哪些功能,真要用到时再去查文档。可以看到其实
string
就是一个管理字符数组的顺序表,因为字符数组的使用广泛,C++ 就专门给了一个
string
类,由于编码原因,它写的是一个模板。针对
string
,一般情况它有三个成员 —— char* _str、size_t _size、size_t _capacity,我们在下面模
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章