java String(),java中的string的运用
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
下面有段简单的代码
公共类字符串plust {
公共静态void main(String[] args) {
字符串s1= aaa
字符串s2= bbb
字符串s= ccc s1 s2 ddd
}}使用javap -c,\ StringPlusTest.class反编译一下,得到
从" StringPlusTest.java "公共类com。epoint。代码调整。测试。字符串加测试{
公共通讯。epoint。代码调整。测试。string lustest();
代码:
0: aload_0 1: invokespecial #1 //方法Java/语言/对象.init:()V
4:退货
公共静态void main(Java。郎。string[]);
代码:
0: ldc #2 //字符串美国汽车协会
2: astore_1 3: ldc #3 //String bbb
5:astore _ 2 6:new # 4//class Java/lang/StringBuilder
9: dup 10: invokespecial #5 //方法java/lang/StringBuilder .init:()V
13: ldc #6 //字符串控制台控制电路
15: invokevirtual #7 //方法Java/lang/stringbuilder。append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
18: aload_1 19: invokevirtual #7 //方法Java/lang/stringbuilder。append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: aload_2 23: invokevirtual #7 //方法Java/lang/stringbuilder。append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
26: ldc #8 //字符串ddd
28: invokevirtual #7 //方法Java/lang/stringbuilder。append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
31: invokevirtual #9 //方法Java/lang/stringbuilder。tostring:()Ljava/lang/String;
34: astore_3 35: return}其中,
最不发达国家把常量池中的项压入栈
阿斯托雷_1将引用类型或返回地址类型值存入局部变量一
阿斯托雷_2将引用类型或返回地址类型值存入局部变量2
新的创建一个新对象
民主统一党复制栈顶部一个字长内容
invokespecial根据编译时类型来调用实例方法
aload_1从局部变量一中装载引用类型值
aload_2从局部变量2中装载引用类型值
阿斯托雷_3将引用类型或返回地址类型值存入局部变量3更多指令见虚拟机(Java虚拟机的缩写)指令手册
对于爪哇来说,这段代码原理上应该是:
公共类字符串plust {
公共静态void main(String[] args) {
字符串s1= aaa
字符串s2= bbb
String s=new StringBuilder().追加( ccc ).追加(s1).追加(s2).追加( ddd ).toString();
}}由此可见,Java中使用" "拼接字符串的实现原理是通过建立临时StringBuilder对象调用附加和转换对象为字符串方法实现。
对上面代码做一些修改
公共类字符串plust {
公共静态void main(String[] args) {
字符串s1= aaa
字符串s2=空
字符串s= ccc s1 s2 ddd
系统。出去。println(s);
}}结果是什么?
运行可以得到如下:
cccaaanullddd查看StringBuilder源码
@ override public StringBuilder append(String str){
超级棒。append(字符串);
还这个;}该方法调用继承父类AbstractStringBuilder的方法,再去父类中查看
public AbstractStringBuilder append(String str){
if (str==null)
返回appendNull();
int len=str。长度();
ensureCapacityInternal(count len);
str.getChars(0,len,value,count);
计数=长度
还这个;}私有AbstractStringBuilder appendNull(){
int c=计数
ensurecapacityininternal(C4);
final char[]value=this。价值;
值[c]= n ;
值[c]= u ;
值[c]= l ;
值[c]= l ;
count=c;
还这个;}appendNull方法简单来说就是容量4,追加空字符串。
所以结果为cccaaanullddd。
这就是String在java中对“”所做的事情的细节。更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。