【巩固Java基础】String、StringBuffer、StringBuilder

对于引用类型来说,==是进行地址值的比较(注意:字符串无法打印地址值 )

如果字符串想要对比数值,则可以用equals() ☆

  • “equals”对于复合数据类型比较的也是它的堆内存地址(不能作用于基本数据类型的变量)。

但在实际项目中常用来比较_String_字符串的内容相等是为什么呢?

那是因为对于String(还有Date,Integer)类型重写了equals方法,使其比较的是存储对象的内容是否相等,而不是堆内存地址。

在这里插入图片描述

  • 比较对象

==和equal比较的都是内存地址,因为equal没有被重写,没有被重写的equal都是object的equal方法

下面Demo02类就是重写了equals和hashCode方法 所以不是比较的内存地址,而是比较的属性等

在这里插入图片描述

在这里插入图片描述

String类自动重写了hashCode和equals方法

在这里插入图片描述

在这里插入图片描述

String是一个特殊的包装类数据。可以用:

String str = new String(“abc”);

String str = “abc”;

两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。

而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中(字符串池)有没有存放"abc",

如果没有,则将"abc"存放进栈,并令str指向”abc”,

如果已经有”abc” 则直接令str指向“abc”。

用new的方式是生成不同的对象。每一次生成一个。

因此用第二种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间.

同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。

而对于String str = new String(“abc”);的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,

从而加重了程序的负担。

另一方面, 要注意: 我们在使用诸如String str = “abc”;的格式定义类时,总是想当然地认为,创建了String类的对象str。

担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。

由于String类的immutable(不变)性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

内存图说明:

在这里插入图片描述

StringStringBuffer类:字符串缓冲区

说明:字符串是常量,不可改变(底层是byte[]数组,被final修饰)

在这里插入图片描述

解决方式:字符串缓冲区可以改变,可以增强字符串操作的效率

缓冲区原理:底层也是一个数组,但没有被final修饰,就是一个数组,这个数组的初始容量为16,如果超过16,会自动扩充为32,成倍扩充 ☆

在这里插入图片描述

StringBuffer主要是继承的AbstractStringBuilder

在这里插入图片描述

常用方法:

①append():追加

在这里插入图片描述

②toString():转成普通字符串

String与StringBuffer可以相互转换 ☆

String -> StringBuffer 是正常使用StringBuilder有参构造方法

StringBuffer->String 是调用toString()方法

在这里插入图片描述

  • String : 具有不变性, 指的是一旦声明不可改变, 如果进行拼接会开辟新的内存空间, 如果在循环中或拼接次数比较多

效率极低, String为什么要设计成不变性的特点: 字面池(字符串池), 声明变量及使用 性能好

  • StringBuffer: 拼接性能好,不会像String一样 开辟新的内存空间, 线程安全 源码中加了锁

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。







由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
链图片转存中…(img-bbJdG4Xj-1713547260434)]

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值