php网站开发项目,创意网站推荐,电子商务网站建设心得体会,视觉设计的网站和app最近在学习Java的时候#xff0c;遇到了这样一个问题#xff0c;就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢#xff0c;自己从网上搜索了一些资料#xff0c;有所了解了之后在这里整理一下#xff0c;便于大家观看#xff0c;也便于加深自己学习… 最近在学习Java的时候遇到了这样一个问题就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢自己从网上搜索了一些资料有所了解了之后在这里整理一下便于大家观看也便于加深自己学习过程中对这些知识点的记忆如果哪里有误恳请指正。 这三个类之间的区别主要是在两个方面即运行速度和线程安全这两方面。 首先说运行速度或者说是执行速度在这方面运行速度快慢为StringBuilder StringBuffer String String最慢的原因 String为字符串常量而StringBuilder和StringBuffer均为字符串变量即String对象一旦创建之后该对象是不可更改的但后两者的对象是变量是可以更改的。以下面一段代码为例 1 String strabc;
2 System.out.println(str);
3 strstrde;
4 System.out.println(str); 如果运行这段代码会发现先输出“abc”然后又输出“abcde”好像是str这个对象被更改了其实这只是一种假象罢了JVM对于这几行代码是这样处理的首先创建一个String对象str并把“abc”赋值给str然后在第三行中其实JVM又创建了一个新的对象也名为str然后再把原来的str的值和“de”加起来再赋值给新的str而原来的str就会被JVM的垃圾回收机制GC给回收掉了所以str实际上并没有被更改也就是前面说的String对象一旦创建之后就不可更改了。所以Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程所以执行速度很慢。 而StringBuilder和StringBuffer的对象是变量对变量进行操作就是直接对该对象进行更改而不进行创建和回收的操作所以速度要比String快很多。 另外有时候我们会这样对字符串进行赋值 1 String strabcde;
2 StringBuilder stringBuildernew StringBuilder().append(abc).append(de);
3 System.out.println(str);
4 System.out.println(stringBuilder.toString()); 这样输出结果也是“abcde”和“abcde”但是String的速度却比StringBuilder的反应速度要快很多这是因为第1行中的操作和 String strabcde; 是完全一样的所以会很快而如果写成下面这种形式 1 String str1abc;
2 String str2de;
3 String strstr1str2; 那么JVM就会像上面说的那样不断的创建、回收对象来进行这个操作了。速度就会很慢。 2. 再来说线程安全 在线程安全上StringBuilder是线程不安全的而StringBuffer是线程安全的 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时StringBuffer中很多方法可以带有synchronized关键字所以可以保证线程是安全的但StringBuilder的方法则没有该关键字所以不能保证线程安全有可能会出现一些错误的操作。所以如果要进行的操作是多线程的那么就要使用StringBuffer但是在单线程的情况下还是建议使用速度比较快的StringBuilder。 3. 总结一下 String适用于少量的字符串操作的情况 StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer适用多线程下在字符缓冲区进行大量操作的情况 写在最后以上这些总结的内容绝大多数是我从网上以及书上找来的写在这里是想把自己所学的分享给大家方便大家学习同时也有助于自己记忆如果有哪里不对的恳请指正 转载于:https://www.cnblogs.com/su-feng/p/6659064.html