首页 > 其他 > 详细

String

时间:2020-02-11 12:58:41      阅读:69      评论:0      收藏:0      [点我收藏+]

1.string对象的两种创建方式之间的区别:

用new的方式创建string对象,string对象会被放入堆区
或者直接将一个字符串赋给string,string对象会被放入常量区;
 
string str1="hello";
string str2="hello";
//str1与str2指向常量池中的同一个对象;(复用)

string str1=new string("hello");
string str2=new string("hello");
//str1与str2指向堆中的不同对象;

 

2.加法运算

string s=s1+“end”;
重新申请一块内存空间,将s1和"end"复制过去,将引用返回给s;
 
3.==与equals;
equals方法判断两个引用所指向的对象内容是否相同,基于内容的比较;
==判断两个引用所指向的对象是否是同一个,基于地址的比较;
 
4.编译时确定。”常量池在java中用于保存在编译期已确定的,已编译的class文件中的一份数据。“
//在常量池中
string ok="apple1"; //要么在堆中,要么在栈中,不会进入常量池; int temp=1; String ok1="apple"+temp; //运行结果为false System.out.println(ok==ok1); /*temp的值在编译时无法确定,导致ok1的值在编译时也无运行法确定;那么ok1就无法引用常量池中的内容了,在运行时就需要重新分配空间*/

 

5.StringBuilder,StringBuffer,String对象的区别

StringBuffer相比于StringBuilder增加了一些保障线程安全的机制,效率稍微差一点;其他没有差别;
String s1=new String("hello");
s1+="mary";
/*


String底层是StringBuffer;每次利用stirng的+操作都要new一个新的Stringbuffer对象来进行append操作,用完之后释放;
但是如果直接利用StringBuffer来操作就可以避免反复创建、撤销StringBuffer,而是自始至终利用同一个StringBuffer;

所有遇到多次要进行加法操作的场景,要用stringbuffer或stringbuilder,而避免用string
*/

测试两者运行效率的差异,测试代码如下:
public static void main(String[] args) {

long start = System.currentTimeMillis();
StringBuilder s = new StringBuilder("a");
for(int i = 0;i < 100000;i++){
s.append("a");
}
long end = System.currentTimeMillis();
System.out.println(end-start);//string : 7295 stringbuilder : 13
}



 

 

 

String

原文:https://www.cnblogs.com/chxyshaodiao/p/12294382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!