java String StringBuilder StringBuffer 以及各种赋值和注意

String、StringBuffer和StringBuilder的详解 1.值的可变性String内部的value值是final修饰的,所以,它是不可变类;因此,每次修改String的值,都会产生一个新的对象。StringBuffer和StringBuilder是可变类,它们在字符串变更的时候,不会产生新的对象。2.线程安全String是不可变类,所以它是线程安全的。StringBuilder不是线程安全的。StringBuffer是线程安全的,因为它的每个操作方法都加了synchronized同步关键字。单线程情况下,建议使用StringBuilder。 阅读详情



一、String的综述和各种赋值区别 
综述: str只是一个String对象的引用,并不是String对象本身。 
引用是4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。
 

1.String str = null; 
未分配存储空间,表示str不指向任何字符串对象,空引用 
null代表声明了一个空对象,对空对象做任何操作都不行的,除了=和== 

2.String str; 
分配了一个内存空间,没存入任何对象,未初始化的引用 
在方法中定义:直接使用时编译是不通过的,必须赋初值 
在类中定义(static 静态变量):可以不赋初值直接引用,默认赋值为null 

伦理片 http://www.dotdy.com/

3.String str = ""; 
分配存储空间,表示str指向一个长度为0的字符串对象 
""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。 

4.String str = "a";与String str = new String("a");区别 
前者是在字符串池里写入一个字符'a',然后用str指向它 
后者是在堆上创建一个内容为"a"的字符串对象。 
Java代码   收藏代码
  1. //变量a和b将会指向同一内存地址(""的地址)  
  2. String a = "";  
  3. String b = "";  
  4. if(a == b){  
  5.     System.out.println("a和b地址相等"+true);  
  6. }  
  7. if(a.equals(b)){  
  8.     System.out.println("a和b值相等"+true);  
  9. }  
  10. //变量c和d不会指向同一地址,而是两个""内容的地址  
  11. String c = new String("");  
  12. String d = new String("");  
  13. if(c==d){  
  14.     System.out.println("c和d地址相等"+true);  
  15. }  
  16. if(c.equals(d)){  
  17.     System.out.println("c和d值相等"+true);  
  18. }  

变量a,b方式:先去字符串池中查找字符串是否已经存在,如果在就直接指向该地址,如果不在生成一个实例放入池中再指向该地址。 
变量c,d方式:通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的 
所以:a,b方式性能更高。 

5.str.equals("abc")和"abc".equals(str) 
推荐种写法,可以省略掉对null的判断。 
String str = null; 
if(str.equals("abc"))//空指针异常java.lang.NullPointerException 

if("abc".equals(str))//可以正常运行 

6.如何判断字符串是否为空: 
if(str != null && str != "") 
顺序最好不要写反: 
String str = null; 
if(str != "" && str != null)//抛出空指针异java.lang.NullPointerException 

7.判断字符串是否相等 
== : 是判断 str 的地址是否相等。 
equals : 是判读 str 指向的对象值是否相等。 

二、String、StringBuilder、StringBuffer 
1.String 
前面说了: 
String str = "abc"; 
str只是一个字符串对象"abc"的引用,存储的是"abc"在内存中存放的地址。 
str = "def";时 
内存空间重新创建新对象"def",引用str重新指向新对象,实际内存中"abc"的值并未改变。 
对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象 
javac对String的实现机制也是通过JavaBuilder来实现的。 

2.StringBuilder 
Java代码   收藏代码
  1. //无参数的构造方法  
  2. StringBuilder sb = new StringBuilder();  
  3. //源码:  
  4. public StringBuffer() {  
  5.         super(16);  
  6.     }  
  7. //super(16);源码:  
  8. char[] value;  
  9. AbstractStringBuilder(int capacity) {  
  10.         value = new char[capacity];  
  11.     }  

新建StringBuilder()对象时候,默认是构建一个大小为16字节的字符数组char[],StringBuilder预先开辟了空间,append的时候只是向内存地址赋值。如果长度不够时候再重新开辟内存。 
影音先锋电影 http://www.iskdy .com/
3.StringBufffer 
StringBuffer与StringBuilder基本类似。 
StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized。 
=>StringBuffer是线程安全的。 

4.三者性能 
对于几个字符串的拼接,基本差不多。 
大量数据:StringBuilder > StringBuffer > String 

这个文章里面的面试题可以参考下 
基本就这些,后续再补充吧。
Java中String、StringBuffer和StringBuilder的区别和堆栈内存分配 Java中的String类是一个很常用,但最不注意其细节的类,因此大多数面试会那这个类做文章。比如String str = new String("hello");开辟了几个内存空间,String和StringBuffer的区别等等。下面就做一个我的理解: String是一个被final修饰的类,它是不能被继承的。StringBuffer也是被final修饰的类。 一、JVM内存划分 在java中主要存在4块内存,这些内存空间分别为:栈内存空间、堆内存空间、全局数据区、全局代码区 也可以这么说:所 阅读详情

相关推荐

高通camx架构学习(零)—— 深入理解Camera 硬件抽象层

从上面的定义可以看出,主要是通过hw_module_t 代表了模块,通过其open方法用来打开一个设备,而该设备是用hw_device_t来表示,其中除了用来关闭设备的close方法外,并无其它方法,由此可见谷歌定义的HAL接口,并不能满足绝大部分HAL模块的需要,所以谷歌想出了一个比较好的解决方式,那便是将这两个基本结构嵌入到更大的结构体内部,同时在更大的结构内部定义了各自模块特有的方法,用于实现模块的功能,这样,一来对上保持了HAL的统一规范,二来也扩展了模块的功能。

图像学习之旅 1669

【Java StringBuffer类 +案例】

StringBuffer类是可变字符串类,创建StringBuffer类的对象后可以随意修改字符串的内容。每个StringBuffer类的对象都能够存储指定容量的字符串,如果字符串的长度超过了StringBuffer的容量,则该对象的容量会自动扩大。StringBuffer(Stringstr)创建一个字符串缓冲区,并将其内容初始化为指定的字符串内容str,字符串缓冲区的初始容量为16加上字符串str的长度。创建和处理字符串还可以使用StringBuffer类来处理字符串。......

zuoshuiqiqi的博客 1237

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 577

【StringBuilder】长度与容量

在StringBuilder中字符串的长度总是小于等于构建器的容量。长度是存储在构建器中的字符串的实际大小,而容量是构建器的当前大小。如果有更多的字符添加到字符串构建器,超出他的容量,则构建器的容量就会自动增加。在计算机内部,字符串构建器是一个字符数组,因此,构建器的容量就是数组的大小。如果超出构建器的容量,就用新的数组代替现有数组,新数组的大小为2×(之前数组大小+1)。 public class Test { public static void main(String[] args) { .

热爱编程的菜鸟 5950

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 419

思岚A1 上手教程

前言 寒假在家闲着也是闲着,索性就向是实验室借了一个思岚 A1激光雷达,来进一步完成自己的实验室实习项目。经过一个月在Linux上和ROS上的摸爬滚打,我已经对机器人开发和SLAM有了初步了解,现在就写个上手教程吧(以防自己以后忘了)。 Basic Support 硬件 一台电脑 思岚 A1激光雷达 软件 安装Virtual Box虚拟机 在虚拟机安装Ubuntu 16操作系统 在Ubuntu 16搭建ROS kinetic 简要步骤 1.现在w..

ajxdhe的博客 6384

stringbuilder重新赋值_String类、StringBuffer类和StringBuilder类

一、String 类java 没有内置的字符串类型,但是在lang 包中提供了String类来创建和操作字符串,可以发现C# 中定义字符串时,string 第一个字母时小写的。java中定义一个子符串,注意 双引号括住该值,实际上括住的一串字符就是String 对象。注意:字符串变量必须经过初始化才能使用。字符串对象一旦被创建,其值时不能改变的,但可以使用其他变量重新赋值的方式进行更改。声明 和赋...

weixin_39843431的博客 3979

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 806

Java学习日记 | String | StringBuffer和StringBuilder | 包装类

StringBuffer 和 StringBuilder 都是可拼接的字符串当我们需要频繁拼接字符串时,优先使用这两个,而不是String不同点:StringBuffer : 线程安全,多线程环境下不会出现问题StringBuilder : 非线程安全,多线程环境下可能出现问题默认容量是16,扩容为2倍+2【问】想要对基本类型数据进行更多的操作,怎么办?【答】最方便的方式就是将其封装成对象。因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作。

m0_72373025的博客 235

液态神经网络(LNN):打破AI“静态快照”的连续动力学革命---AI大模型系统从零开始0029

MIT研究团队受秀丽隐杆线虫神经系统的启发,开发出革命性的液态神经网络(LNN)。该技术通过连续微分方程建模神经元动态,实现输入响应速度的自适应调节,解决了传统AI模型静态化、高能耗和低解释性的痛点。LNN具有三大突破性优势:仅需少量神经元(如20个)即可完成复杂任务;能处理非均匀时序数据;在自动驾驶、医疗监测等领域展现出卓越的适应性和鲁棒性。这项将生物智能与数学建模完美融合的技术,有望成为下一代AI的核心架构,目前已在无人机导航等场景验证了其高效性,被预测为2026年最具潜力的AI突破方向。

添柴程序猿的专栏 372

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

简单了解java的StringBuilder扩容

package com.example.demo.test; /** * <p> * <code>StringBuilderTest</code> * </p> * Description: JDK 1.8 * * @author Jalen * @date 2019/8/26 9:41 */ public class Stri...

Jalen备忘录 497

13、数据可视化与分组操作:Danfo.js 实战指南

本文深入介绍了如何使用 Danfo.js 进行数据可视化与分组操作。内容涵盖多种图表的创建与配置,如折线图、散点图、箱线图、小提琴图、直方图和柱状图,并结合 Plotly.js 实现丰富的交互式可视化效果。同时,详细讲解了数据聚合的‘分割-应用-组合’模式,包括分组数据、遍历分组、apply 方法及 agg 聚合操作,帮助开发者高效处理和分析结构化数据。适用于 Dnotebook、HTML 及主流前端框架的应用场景。

o1p2q3r的博客 98

Java 可变字符串(StringBuilder、StringBuffer)

Java 可变字符串(StringBuilder、StringBuffer)

qq_43655412的博客 1452

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++ string 赋值文本内容_简谈Java中“String类”的特点

前言:在之前的文章中,有小伙伴说看不懂,没有很理解string类,今天作者就来谈一下string类的特点!希望小伙伴们能够理解。大家有什么建议也可以在下方评论中说出来,作者都会去一条条看的哦,好的都会采纳的哦!String类的特点1.String类对象的相等判断使用equals() 方法完成,“==”实现的是地址数值的比较。2.字符串内容一旦声明则不可改变,String类对象内容的改变是依靠引用关...

weixin_33603551的博客 112

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

String,StringBuffer与StringBuilder的区别

一、Java String 类——String字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图: 我们可...

黎明前的准备 30万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

String、StringBuffer和StringBuilder之间的区别

String、StringBuffer和StringBuilder之间的区别 @author 无忧少年 @createTime 2019/12/09 1. Java String 类——String字符串常量 ​ 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 ​ 需要注意的是,String的值是不可变的,这就导...

无忧少年的博客 9166

【java】关于String、StringBuffer和StringBuilder的那些事

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。他们的底层原理与String类似,都是通过数组来完成对字符串的存储,其默认长度为16,当实例化一个StringBuider对象时,会根据创建字符串的长度来初始化内存,数组的内存为“创建字符的长度+16”,即在进行修改字符串的操作时有16个字符的空间可供操作,在对字符串进行修改时,会自动检测当前char数组是否装的下,如果超出数组范围,会对char数组进行扩容。

acm_pn的博客 1564

关于String、StringBuffer、StringBuilder的区别

最近看到了一道题目: 正确答案:C 下面就这题的其他选项给出解析: String String不可变!先来看看String的源码: public final class String implements Serializable, Comparable<String>, CharSequence { private final byte[] value; priva...

江璇Up 4548

【Java】String、StringBuilder、StringBuffer的介绍和区分

介绍StringBuilder、StringBuffer的常用方法和String、StringBuilder、StringBuffer三者的区别。

trong_ 的烂笔头 1205

【Java】中的String、StringBuffer和StringBuilder的区别

在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。至于为啥是不可变,我们可以来看下面这个图,发现String是用final修饰的,导致了他的不可变。 接下来我们从内存的角度来看一下,操作String类型时候的内存变化不难看出:初始String值为"Hello",然后在这个字符串后面加上新的字符串"world",这个过程重新

秋名山码民的技术小屋 1万+

Java 之深入理解 String、StringBuilder、StringBuffer

String 类被 final 修饰,表明该类不能被继承;value 被 final 修饰,表明 value 自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改String 类 不能被继承:该类被 final 修饰String 类是不可变的:value[ ] 被 final 修饰,表明 value[ ] 自身的值不能改变String 类可以序列化,可以和其他 String 比较其大小:实现了 Comparable 接口。

2301_79201049的博客 1692

浅谈Java中的String,StringBuffer与StringBuilder

String,StringBuffer与StringBuilder类是我们比较常用的三个类,弄懂它们也是很重的,下面是我学习之后对这三个类的总结,欢迎评论纠错

weixin_45680017的博客 1983

Java 的 String、StringBuffer 和 StringBuilder(一文讲透)

你知道 Java 中的 String、StringBuffer 和 StringBuilder 的发展历史吗?你知道它们的区别吗?你知道它们的适用场景吗?想知道就赶紧进来看看吧!

小康2022的博客 1940

java StringBuffer和StringBuilder

一、前言 我们在实际的开发中,如果需要进行字符串的频繁拼接,会出现以下问题: java中的字符串是不可变的,每一次拼接都会产生新字符串。 这样会占用大量的方法区内存。造成内存空间的浪费。 eg. String s = "abc"; s += "hello"; 就以上两行代码,就导致在方法区字符串常量池当中创建了3个对象: "abc" "hello" "abchello" 因此引出StringBuffer和StringBuilder可变字符串! 二、如何优化StringBuffer和StringBuild

一只小菜鸡 7879

理解String、StringBuffer和StringBuilder类

String、StringBuffer和StringBuilder类

weixin_61898502的博客 1618
上一篇: Weblogic Jms简单应用
下一篇: java正则匹配html片段,并取得标签中的内容
dotedy
博客等级 码龄11年 61粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值