核心要点

  • String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”
  • String的核心就是char[]字符串,外部写的string对象,都会放入char[]字符串中
  • char[] 数组被final限制是一个常量,所以只能赋值一次,这便是把char成为不可变量原因之一
  • 看到的字符串变化,都是方法内新建的对象,新建的对象进行的重新赋值

源码:

1 public final class String
2 implements java.io.Serializable, Comparable<String>, CharSequence {
3 /** The value is used for character storage. */
4 private final char value[];
5
6 ....
7 }

新建对象

 1 public String substring(int beginIndex, int endIndex) {
2 if (beginIndex < 0) {
3 throw new StringIndexOutOfBoundsException(beginIndex);
4 }
5 if (endIndex > value.length) {
6 throw new StringIndexOutOfBoundsException(endIndex);
7 }
8 int subLen = endIndex - beginIndex;
9 if (subLen < 0) {
10 throw new StringIndexOutOfBoundsException(subLen);
11 }
12 return ((beginIndex == 0) && (endIndex == value.length)) ? this
13
14 // 新建对象
15 : new String(value, beginIndex, subLen);
16 }

比较的使用方式

  • '=='进行String对象之间的比较 '=='是两个对象之间进行比较,这里比较需要使用equals进行比较 编译器优化:

    1  //相当于stringValue = "hello java";
    2 String stringValue= "hello" + " java";
    3 String stringValueNew= "hello java";
    4 //true
    5 System.out.println(stringValue == stringValueNew);

异常代码:

1  String stringValueNew = "hello java";
2
3 String helloString = "hello";
4 String javaString = "java";
5
6 //编译的时候不知道变量中存储的是什么,所以没办法在编译的时候优化
7 String finalString = helloString + javaString;
8 //false
9 System.out.println(finalString == stringValueNew);

注: 

字符串比较一定要使用equals方法

String其他方法是用请参见: (https://www.cnblogs.com/liuyangfirst/p/12316114.html "String方法使用详情")

JDK源码阅读-------自学笔记(十一)(java.lang.String包装类)的更多相关文章

  1. JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)

    一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...

  2. JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)

    Vector 向量 Vector简述 1).Vector底层是用数组实现的List 2).虽然线程安全,但是效率低,所以并不是安全就是好的 3).底层大量方法添加synchronized同步标记,sy ...

  3. JDK源码阅读-------自学笔记(五)(浅析数组)

    一.数组基础 1.定义和特点 数组也可以看做是对象,数组变量属于引用类型,数组中每个元素相当于该队形的成员变量,数组对象存储在堆中. 2.初始化数组 常用类初始化 // 整型初始化 int[] int ...

  4. JDK源码阅读-------自学笔记(二十四)(java.util.LinkedList 再探 自定义讲解)

    一.实现get方法 1.一般思维实现思路 1).将对象的值放入一个中间变量中. 2).遍历索引值,将中间量的下一个元素赋值给中间量. 3).返回中间量中的元素值. 4).示意图 get(2),传入角标 ...

  5. JDK源码阅读-DirectByteBuffer

    本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计.但是他是一个抽象类,真正的实现分为两类:HeapB ...

  6. JDK源码阅读(三):ArraryList源码解析

    今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...

  7. JDK源码阅读(一):Object源码分析

    最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...

  8. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

  9. JDK源码阅读-FileOutputStream

    本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流. 打开文件 public FileOutputStream(File fil ...

  10. JDK源码阅读-FileInputStream

    本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流. 打开文件 我们来看看FileIntputStream打开文件时,做了什么 ...

随机推荐

  1. #概率,dp#JZOJ 4212 我想大声告诉你

    题目 小\(x\)和他的\(n-1\)个朋友,进行\(k\)轮游戏,每轮等概率选出一个人作为获胜者并退出游戏, 其余在游戏中的人有\(p\)的概率被迫退出游戏,问对于任意的轮数\(k\),使小\(x\ ...

  2. Centos环境部署SpringBoot项目

    centos JDK Jenkins maven tomcat git myslq nginx 7.9 11.0.19 2.418 3.8.1 9.0.78 2.34.4 5.7.26 1.24.0 ...

  3. Device Partner平台合作伙伴认证和数据安全保护

     Device Partner平台是面向AIoT产业链伙伴的一站式服务平台,伙伴可以通过平台获取最新的产品.服务与解决方案,实现智能硬件产品的开发.认证.量产和推广等全生命周期的管理,加入Harmon ...

  4. ImageJ软件使用教程(二):图像测量

    目录 图像比例尺 加载图像 设置比例尺 标注比例尺 测量长度面积 测量长度 测量面积 参考资料 图像比例尺 使用ImageJ软件测量图像中的长度.面积等信息时,需要先设置图像的比例尺,比例尺用于将图像 ...

  5. 从Vue2转换为Vue3

    方便的Vue2到Vue3生命周期映射直接来自Vue3 Composition API文档,我认为这是了解事物将如何变化以及如何使用它们的最有用的方法之一. beforeCreate -> use ...

  6. 力扣19(java&python)-删除链表的倒数第 N 个结点(中等)

    题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例2: 输入:head = ...

  7. PolarDB-X 全局二级索引

    简介: 索引是数据库的基础组件,早在1970年代,SystemR 就已经通过增加索引来支持多维度查询.单机数据库中,索引主要按照用途和使用的数据结构分为 BTree 索引.Hash 索引.全文索引.空 ...

  8. 科普达人丨漫画图解什么是eRDMA?

    简介: 绕过CPU,将数据直接从一台计算机的内存传输到另一台计算机,进行网络加速 在一个领先的阿里云数据中心里,数百台服务器(也就是大型的计算机)在疯狂工作和通信,他们正在合力完成一个大型的大数据处理 ...

  9. 为 Serverless Devs 插上 Terraform 的翅膀,实现企业级多环境部署(下)

    简介: 在上篇中,主要介绍了 Serverless Devs 多环境功能的使用,用户读完可能会些疑问,本文会就一些常见问题进行下回答. 在上篇中,主要介绍了 Serverless Devs 多环境功能 ...

  10. MaxCompute 公共云多租户设计的技术要点详解及产品实现特色

    ​简介:公共云大数据平台在多租户的设计和实现方式上有所差异.本文主要介绍在公共云大数据平台的多租实现方案中需要考虑的问题和挑战,重点介绍了MaxCompute在计算和存储多租实现上的特点.期望通过这些 ...