Java中的String,StringBuffer,StringBuilder详解与区别
1.String
Java中string类是不可变的,其中在声明的源代码中用的final,所以只能声明一次。
所以每次在明面上的改变其实是重新生成一个String对象,指针指向新的String对象。
同时,String内部重写的了equal的方法,原本Object的equal就是两个对象相等就可以,
但是现在,并不能靠对象相等来判断值相等了,重写的equal中会挨个比较字符,
这也就是为啥比较同样内容字符串要用equal的原因。
同时String a="111"+"222"+"333";
跟 String b="111";
String c="222";
String d="222";
String a=b+c+d;
的开销是不一样的,明显上面的更快一点,String这样建立字符串是最快的
后者其实也是调用了StringBuffer的append方法,一个一个加进去的。
前者,编译的时候就是111222333了
2.StringBuffer
StringBuffer是线程安全的。一个String的字符缓冲区,如果要频繁的进行字符的修改,
用这个是最好的选择,并且每次操作就是对自身对象的操作,就跟String类区分开了。
其中用的最多的是append和insert,append就是插入到字符串末尾,insert就是插入到指定位置。
3.StringBuilder
但是又不是每次都是很多线程操作并且频繁的操作,但是又不能用String不停创建新对象影响性能。
这样就出现了StringBuilder。API都是跟StringBuffer兼容的,大都适用于单线程操作。
三者用法:
1.String适用于少量数据的操作,StringBuffer适用于多线程频繁操作大量数据,StringBuilder适用于
单线程操作大量的数据。
2.不要经常用字符串拼接+号,因为每次都会创建新对象增加开销,例如上面的String a=b+c+d;
3.StringBuffer和StringBuilder最好创建时候定义好长度,这样更好提高性能。
还有区别好系统的运行方式,多线程还是单线程,这样可以根据StringBuffer和StringBuilder的特色选择更好的方式
Java中的String,StringBuffer,StringBuilder详解与区别的更多相关文章
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用
Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...
- JAVA中的String类(详解)
Java.lang.String类是final类型的,因此不可以继承这个类.不能修改这个类.String是一个类不属于基本数据类型. 可以从源码中看到,String是一个final类型. String ...
- 在JAVA中,String,Stringbuffer,StringBuilder 的区别
首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String 不是线程安全的,这意味着在不同线程共享一个String ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- Python中%r和%s的详解及区别_python_脚本之家
Python中%r和%s的详解及区别_python_脚本之家 https://www.jb51.net/article/108589.htm
- Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- Java中的String,StringBuilder,StringBuffer三者的区别(转载)
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- 转:Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
- [转载]Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...
随机推荐
- Result Cache结果高速缓存 (转)
1.1 概述 SQL 查询结果高速缓存可在数据库内存中对查询结果集和查询碎片启用显式高速缓存.存储在共享池(Share Pool)中的专用内存缓冲区可用于存储和检索高速缓存的结果.对查询访问的数据库对 ...
- JavaScript检测原始值、引用值、属性
上周写过一篇读书笔记<编写可维护的JavaScript>之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑较多的雷区,所以特此把该章节重新整理分享,希望大家不再坑队友(>﹏& ...
- UVA 1569 Multiple
题意: 给定m个1位数字,要求用这些数字组成n的倍数的最小数字,如果无法组成就输出0 分析: BFS,由于n最大5000,余数最多5000,利用余数去判重,并记录下路径即可 代码: #include ...
- 8QQ消息框
1 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- Your build settings specify a provisioning profile with the UUID, no such provisioning profile was found的解决方案
在Archive项目时,出现了“Your build settings specify a provisioning profile with the UUID “”, however, no suc ...
- iOS开发那些事儿(五)Objective-C浅拷贝与深拷贝
浅拷贝:copy操作出来的对象指针直接指向模板的地址.即两个对象公用一块内存地址 #import <Foundation/Foundation.h> int main(int argc, ...
- Qt5 多显示器获取不同显示器的分辨率和位置的方法
Qt5 多显示器获取不同显示器的分辨率和位置的方法 先放官方文档链接:QDesktopWidget - Qt5 Reference 之前一直在用被我乱搞后的ShadowPlayer作为默认播放器,后来 ...
- 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求
在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octivi联合创始人兼软件架构师Antoni Orfin将向你介绍一个非常简单的架构,使用H ...
- Bootstrap之Button.js
查看Button.js的源代码 +function ($) { 'use strict'; // BUTTON PUBLIC CLASS DEFINITION // ================= ...
- ArrayList--卧槽这就是源码
最近在<数据结构与算法分析(java版)>中看到了实现ArrayList的简易代码,亲自做了一下.个中的疑点还是在代码中实现了一下.其中就包括内部类Iterator对外部成员访问的问题. ...