广告
返回顶部
首页 > 资讯 > 数据库 >JavaString对象是什么
  • 402
分享到

JavaString对象是什么

2024-04-02 19:04:59 402人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关JavaString对象是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java String 对象,你真的了解了吗?&nb

这篇文章将为大家详细讲解有关JavaString对象是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Java String 对象,你真的了解了吗? 

String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一下String对象的优化过程。

  在 Java6 以及之前的版本中String对象是对 char 数组进行了封装实现的对象,主要有四个成员变量:char 数组、偏移量 offset、字符数量 count、哈希值 hash。String对象是通过 offset 和 count 两个属性来定位 char[] 数组,获取字符串。这么做可以高效、快速地共享数组对象,同时节省内存空间,但这种方式很有可能会导致内存泄漏。2. 从 Java7 版本开始到 Java8 版本从 Java7 版本开始,Java 对String类做了一些改变。String类中不再有 offset 和 count 两个变量了。这样的好处是String对象占用的内存稍微少了些,同时 String.substring 方法也不再共享 char[],从而解决了使用该方法可能导致的内存泄漏问题。3. 从 Java9 版本开始将 char[] 数组改为了 byte[] 数组,为什么需要这样做呢?我们知道 char 是两个字节,如果用来存一个字节的字符有点浪费,为了节约空间,Java 公司就改成了一个字节的byte来存储字符串。这样在存储一个字节的字符是就避免了浪费。在 Java9 维护了一个新的属性 coder,它是编码格式的标识,在计算字符串长度或者调用 indexOf() 函数时,需要根据这个字段,判断如何计算字符串长度。coder 属性默认有 0 和 1 两个值, 0 代表Latin-1(单字节编码),1 代表 UTF-16 编码。如果 String判断字符串只包含了 Latin-1,则 coder 属性值为 0 ,反之则为 1。

  通过字符串常量的方式String str= "pingtouge"的形式,使用这种形式创建字符串时, JVM 会在字符串常量池中先检查是否存在该对象,如果存在,返回该对象的引用地址,如果不存在,则在字符串常量池中创建该字符串对象并且返回引用。使用这种方式创建的好处是:避免了相同值的字符串重复创建,节约了内存。2、String()构造函数的方式String str = new String("pingtouge")的形式,使用这种方式创建字符串对象过程就比较复杂,分成两个阶段,首先在编译时,字符串pingtouge会被加入到常量结构中,类加载时候就会在常量池中创建该字符串。然后就是在调用new()时,JVM 将会调用String的构造函数,同时引用常量池中的pingtouge字符串,在堆内存中创建一个String对象并且返回堆中的引用地址。了解了String对象两种创建方式,我们来分析一下下面这段代码,加深我们对这两种方式的理解,下面这段代码片中,str是否等于str1呢?

  我们逐一来分析这几行代码,首先从String str = "pingtouge"开始,这里使用了字符串常量的方式创建字符串对象,在创建pingtouge字符串对象时,JVM会去常量池中查找是否存在该字符串,这里的答案肯定是没有的,所以JVM将会在常量池中创建该字符串对象并且返回对象的地址引用,所以str指向的是pingtouge字符串对象在常量池中的地址引用。

  然后是String str1 = new String("pingtouge")这行代码,这里使用的是构造函数的方式创建字符串对象,根据我们上面对构造函数方式创建字符串对象的理解,str1得到的应该是堆中pingtouge字符串的引用地址。由于str指向的是pingtouge字符串对象在常量池中的地址引用而str1指向的是堆中pingtouge字符串的引用地址,所以str肯定不等于str1。

  从我们知道String对象的那一刻起,我想大家都知道了String对象是不可变的。那它不可变是怎么做到的呢?Java 这么做能带来哪些好处?我们一起来简单的探讨一下,先来看看String 对象的一段源码

  从这段源码中可以看出,String类用了 final 修饰符,我们知道当一个类被 final 修饰时,表明这个类不能被继承,所以String类不能被继承。这是String不可变的第一点

  再往下看,用来存储字符串的char value[]数组被private 和final修饰,我们知道对于一个被final的基本数据类型的变量,则其数值一旦在初始化之后便不能更改。这是String不可变的第二点。Java 公司为什么要将String设置成不可变的,主要从以下三方面考虑:1、保证 String 对象的安全性。假设 String 对象是可变的,那么 String 对象将可能被恶意修改。2、保证 hash 属性值不会频繁变更,确保了唯一性,使得类似 HashMap 容器才能实现相应的 key-value 缓存功能。3、可以实现字符串常量池

关于JavaString对象是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: JavaString对象是什么

本文链接: https://www.lsjlt.com/news/60286.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaString对象是什么
    这篇文章将为大家详细讲解有关JavaString对象是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java String 对象,你真的了解了吗&nbs...
    99+
    2022-10-18
  • Date对象是什么
    这篇文章给大家介绍Date对象是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  类型使用自 UTC(Coordinated Universal Time,国际协调时间)1970 年 1 月 1 日午夜(零时)开始...
    99+
    2023-06-05
  • 什么是JavaScript对象
    这篇文章主要介绍“什么是JavaScript对象”,在日常操作中,相信很多人在什么是JavaScript对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是JavaScr...
    99+
    2022-10-19
  • javascript对象是什么
    本篇内容介绍了“javascript对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 什么是XMLHttpRequest对象
    这篇文章主要讲解了“什么是XMLHttpRequest对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是XMLHttpRequest对象”吧!&nbs...
    99+
    2022-10-19
  • Python对象是什么
    这篇文章主要讲解了“Python对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python对象是什么”吧!类和对象的概念类是对我们要处理的客观事物的抽象。类用来描述具有相同的属性和...
    99+
    2023-06-02
  • php对象是什么
    本篇内容介绍了“php对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中的对象是一个由信息及对信息进行处理的描述所组成的整体,...
    99+
    2023-06-21
  • 什么是response对象
    Response对象是在Web开发中经常使用的一个对象,它代表着服务器对客户端请求的响应。当客户端向服务器发送一个请求后,服务器会生...
    99+
    2023-08-29
    response
  • 什么是变量对象
    这篇文章主要介绍“什么是变量对象”,在日常操作中,相信很多人在什么是变量对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是变量对象”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2022-10-19
  • java中什么是对象
    本篇文章为大家展示了java中什么是对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网...
    99+
    2023-06-14
  • ADO Connection对象是什么
    这篇文章主要讲解了“ADO Connection对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO Connection对象是什么”吧!ADO Connection对象表示数据源...
    99+
    2023-06-17
  • WCF Stream对象是什么
    本篇内容介绍了“WCF Stream对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!由于Stream操作受到绑定的限制,只能使用Ba...
    99+
    2023-06-17
  • JSON对象与Javascript对象的区别是什么
    本篇内容主要讲解“JSON对象与Javascript对象的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JSON对象与Javascript对象的区别是...
    99+
    2022-10-19
  • java中什么是类,什么是对象
    类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个...
    99+
    2020-06-27
    java入门 java 对象
  • JavaScript中String对象是什么
    这篇文章主要介绍了JavaScript中String对象是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。String对象String对象...
    99+
    2022-10-19
  • JavaScript中Date对象是什么
    小编给大家分享一下JavaScript中Date对象是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Date对象Date对象...
    99+
    2022-10-19
  • ADO.NET实例对象是什么
    本篇内容介绍了“ADO.NET实例对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ADO.NET实例对象的技术人员对Team Sys...
    99+
    2023-06-17
  • ADO.NET对象服务是什么
    这篇文章主要介绍“ADO.NET对象服务是什么”,在日常操作中,相信很多人在ADO.NET对象服务是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET对象服务是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • javascript核心对象是什么
    这篇文章主要介绍了javascript核心对象是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript核心对象:1、Math...
    99+
    2022-10-19
  • AJax中XMLHTTPRequest对象是什么
    这篇文章主要为大家展示了“AJax中XMLHTTPRequest对象是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“AJax中XMLHTTPRequest对...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作