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不可变,那么不可变的好处在哪?

  1. 可以缓存 hash 值
    因为 String 的 hash 值经常被使用,例如 String 用做 HashMap 的 key。不可变的特性可以使得 hash 值也不可变,因此只需要进行一次计算。

  2. String Pool 的需要
    如果一个 String 对象已经被创建过了,那么就会从 String Pool 中取得引用。只有 String 是不可变的,才可能使用 String Pool。
    (关于String Pool,我会再开个贴详细探讨)

  3. 安全性
    String 不可变性可以用于一些重要的不可变的参数。

  4. 线程安全
    String 不可变性天生具备线程安全,可以在多个线程中安全地使用。

四、java 中操作字符串都有哪些类?他们有什么区别?
三个类,String,StringBuffer,StringBuilder。
1.从可变性看
String不可变,StringBuffer和StringBuilder可变。
2.线程安全
String不可变,是线程安全。
这里主要是后两者:
StringBuilder不是线程安全的,StringBuffer是线程安全,其内部使用了synchronized。(线程安全总是同步的)
但相应的,StringBuilder的性能也要高于StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

今天的分享就到这里,如果有不足的地方大家可以提提改进意见,朽木君很乐意做出改变。如果大家没意见的话就帮忙点个赞支持支持,给朽木君一点鼓励ヾ(◍°∇°◍)ノ゙



这篇关于Java的String (一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程