[javase]字符串拼接
2012-07-30 23:59
190 查看
原文地址:http://tech.techweb.com.cn/thread-511421-1-1.html
网上剖析String的不少,关于其他的String的知识我就不累赘去说了!" }* I# t% R+ R6 f
* t) ]$ Q' O4 ~- y5 _. O0 r8 h
本文只解释下我在面试中遇到的String拼接的问题以及最近看到了网上的一道机试题跟这个有关系, 所以就想把自己对String拼接的理解分享给大家
Java codeString s =
null; ' O' D+ t# W8 k
s +=5 z ? f( H; o6 Z
"abc"; + u& I# { X/ v6 u- M3 C
System.out.println(s);
答案是nullabc!1 h! Z! w. `$ L# E, p
就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9 p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!
就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9 p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9
p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!
网上剖析String的不少,关于其他的String的知识我就不累赘去说了!" }* I# t% R+ R6 f
* t) ]$ Q' O4 ~- y5 _. O0 r8 h
本文只解释下我在面试中遇到的String拼接的问题以及最近看到了网上的一道机试题跟这个有关系, 所以就想把自己对String拼接的理解分享给大家
Java codeString s =
null; ' O' D+ t# W8 k
s +=5 z ? f( H; o6 Z
"abc"; + u& I# { X/ v6 u- M3 C
System.out.println(s);
答案是nullabc!1 h! Z! w. `$ L# E, p
就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9 p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!
就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9 p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了。! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话。将很容易就解决!- T9
p8 d( O8 J$ P
3 f( S, j( ]7 t" t1 r4 P4 I4 O
很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!
1 A5 q% K: p5 b2 d B! U0 N9 j
运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)!
接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!
" k) e9 V4 h0 M" d
所以那道题答案的由来就是StringBuilder.append("null").append("abc").toString();6 _, Q$ p8 f$ G- V2 v
大家看了我以上的分析以后, 再碰到诸如此类的面试题应该不会再出错了!6 X( j# s* F. d
3 ?$ Z ^$ Q# |7 B
那么了解String拼接有什么用呢?% B( Z2 `' k! T5 N8 T" s
5 p, u; q# ^! H$ d, V
在做多线程的时候, 往往会用到一个同步监视器对象去同步一个代码块中的代码synchronized(Obj), 对同一个对象才会互斥,不是同一个对象就不会互斥!
相关文章推荐
- java--sql模糊查询(字符串拆分与拼接)
- .NET中string与StringBuilder在字符串拼接功能上的比较
- swift 字符串拼接、截取
- innerHTML字符串拼接
- 解决Oracle in 超过1000个问题 C#拼接字符串
- Python中的字符串序列拼接方法
- python字符串的拼接,文件的读入写出
- js两种拼接字符串方法
- java中五中拼接字符串的方法
- 多条件查询的sql语句字符串拼接
- php 排序数组,拼接字符串
- SQLSERVER 根据传入的参数拼接sql语句字符串,反馈结果集
- Java String 字符串拼接,截取,查找及日期转换
- 2. 给定一个图片文件名,判断字符串中是否以“png”结尾,如果是就替换成“jpg”,如果不是,就拼接”.jpg”。
- sqlserver 函数里并返回一个表格数据拼接的字符串
- jquery 全选和 获取所有选取的ID 组成的字符串用于拼接sql
- PHP中实现数组中key与value拼接成SQL语句中的WHERE查询字符串
- Java字符串拼接效率分析及最佳实践
- js中字符串拼接变量问题
- php+js字符串的拼接