Java的String (一)
2021/5/7 14:55:23
本文主要是介绍Java的String (一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java的String (一)
路漫漫其修远兮~再远真的就走不动了。大家好,这里是没用的朽木君,为了纪念荒废了两年的大学生活,决定开始我的博客之旅,与大家分享一下我学到的知识,大家有兴趣的话可以一起探讨啊!!
一、String 属于基础数据类型吗?
答案:
String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。
这是个非常基础的知识点,大家可以自己印证一下。
各位有没有发现什么,在idea中8个基础数据类型都会显示高亮,而String不会,因为他是一个对象。让我们按住Ctrl点击他们,发现点击基础类型没有效果,而点击String会看到它的源码。
都说要成为一个厉害的程序员,源码的阅读是必不可少的。让我们来简略看看开头源码
震惊,String原来是一个final类,并且用了final修饰的byte[]来储存数据,所以它不可变。
关于String源码的阅读以后会开个帖子详说,毕竟这应该会是我第一次阅读源码。朽木君真的是太菜了
二、String 类能被继承吗?为什么?
答案当然是否定的,刚刚源码已经明确显示了此类被final修饰,因此不可被继承。
那么又引出一个问题,final在Java中起什么作用呢?
(1)final 修饰的类叫最终类,该类不能被继承。
(2)final 修饰的方法不能被重写。
(3)final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
三、String不可变的好处
一个问题往往会向不同方向继续引发出新的问题,大家要有一颗探知的心,程序员这个烂活更是如此o(╥﹏╥)o
知道了String不可变,那么不可变的好处在哪?
-
可以缓存 hash 值
因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。 -
String Pool 的需要
如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
(关于String Pool,我会再开个贴详细探讨) -
安全性
String 不可变性可以用于一些重要的不可变的参数。 -
线程安全
String 不可变性天生具备线程安全,可以在多个线程中安全地使用。
四、java 中操作字符串都有哪些类?他们有什么区别?
三个类,String,StringBuffer,StringBuilder。
1.从可变性看
String不可变,StringBuffer和StringBuilder可变。
2.线程安全
String不可变,是线程安全。
这里主要是后两者:
StringBuilder不是线程安全的,StringBuffer是线程安全,其内部使用了synchronized。(线程安全总是同步的)
但相应的,StringBuilder的性能也要高于StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
今天的分享就到这里,如果有不足的地方大家可以提提改进意见,朽木君很乐意做出改变。如果大家没意见的话就帮忙点个赞支持支持,给朽木君一点鼓励ヾ(◍°∇°◍)ノ゙
这篇关于Java的String (一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?