当前位置: 首页 > news >正文

string字符串内容倒叙_面试题:String,StringBuffer 和StringBuilder三者的区别,以及如何实现一个字符串倒序?...

面试题:String , StringBuffer 和StringBuilder三者的区别,以及如何实现一个字符串倒序?

答案

String 的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用 StringBuffer或者StringBuilder。StringBuffer 和 StringBuilder主要区分是在线程安全和执行速度上。StringBuffer线程安全但速度慢,StringBuilder非线程安全但速度快。

字符串倒序

字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde” 变成“edcba”

答: String src = "ABCDEF ";

String dst = new StringBuffer(src).reverse().toString();

private String reverse(String src){

return new StringBuffer(src).reverse().toString();

}

探究String和StringBuffer的区别

String 字符串(长度不可变)

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。

因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

探究StringBuffer 和 StringBuilder 类的区别

StringBuffer 字符串变量(线程安全,但执行速度慢)

StringBuilder 字符串变量(非线程安全,但执行速度快)

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

总结

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

当对字符串进行修改的时候,特别是字符串对象经常改变的情况下,需要使用 StringBuffer 和 StringBuilder 类。

StringBuffer 和 StringBuilder主要区分是在线程安全和执行速度上。StringBuffer线程安全但速度慢,StringBuilder非线程安全但速度快。

相关文章:

  • 地脚螺钉直径系列_地脚螺钉的作用,地脚螺钉直径规格!
  • redis课程视频 黄建宏_Redis从入门到精通 视频教程 下载
  • 是什么_格什么条?格拉什么?什么拉条?
  • fetch 自动加cookie_selenium自动化测试之--验证码处理
  • tomcat中的mdmp文件_Tomcat的使用(详细流程)
  • iot架构 mqtt netty_MQTT 协议是什么
  • echart 三维可视化地图_可视化地图是什么?推荐3个工具!
  • python修改json文件value值_python批量修改json文件
  • getpostdata php7.0_我整理的PHP 7.0主要新特性
  • 是什么字_面试官:“狗”字去掉一笔,是什么字?专科生1秒回答,全场鼓掌...
  • 判断字符串_04Python里字符串的常用操作方法三判断
  • intl扩展 mac 安装php_MAC下PHP7.1.23安装intl3.0.0
  • 5 日期范围查询_SQL 之 简单查询
  • 线段测量_CAD看图软件技巧:一分钟学会CAD多线段测量
  • python格式字符_相当实用的Python格式字符串,格式化
  • co.js - 让异步代码同步化
  • Cookie 在前端中的实践
  • github指令
  • Java,console输出实时的转向GUI textbox
  • java多线程
  • java取消线程实例
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Lsb图片隐写
  • node.js
  • Python socket服务器端、客户端传送信息
  • Vue.js 移动端适配之 vw 解决方案
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 警报:线上事故之CountDownLatch的威力
  • 山寨一个 Promise
  • 深入 Nginx 之配置篇
  • 数据科学 第 3 章 11 字符串处理
  • 一些css基础学习笔记
  • 数据库巡检项
  • ​香农与信息论三大定律
  • #define 用法
  • $refs 、$nextTic、动态组件、name的使用
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (六)vue-router+UI组件库
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)Controller接口控制器详解(三)
  • (算法)求1到1亿间的质数或素数
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)LINQ之路
  • (转)linux下的时间函数使用
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 2.0中新增的一些TryGet,TryParse等方法