核心要点

  • 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. OpenHarmony 3.2 Release新特性解读之驱动HCS

      OpenAtom OpenHarmony(以下简称"OpenHarmony")开源社区,在今年4月正式发布了OpenHarmony 3.2 Release版本,标准系统能力进一 ...

  2. C语言 03 原码 反码 补码

    原码 计算机中所有的数字都是使用 0 和 1 这样的二进制数来进行表示的. 这时如果要存储一个数据,比如十进制的 3,那么就需要使用 2 个二进制位来保存,二进制格式为 11,占用两个位置,称为 2 ...

  3. KL散度和交叉熵的对比介绍

    KL散度(Kullback-Leibler Divergence)和交叉熵(Cross Entropy)是在机器学习中广泛使用的概念.这两者都用于比较两个概率分布之间的相似性,但在一些方面,它们也有所 ...

  4. Linux(CentOS7.2)安装cnpm

    1.安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 2.如下安装成功 /root/node-v10.16.3 ...

  5. FPGA芯片结构介绍及工作原理解析

    FPGA工作原理与简介    如前所述,FPGA是在PAL.GAL.EPLD.CPLD等可编程器件的基础上进一步发展的产物.它是作为ASIC领域中的一种半定制电路而出现的,即解决了定制电路的不足,又克 ...

  6. 力扣907(java)-子数组的最小值之和(中等)

    题目: 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组. 由于答案可能很大,因此 返回答案模 10^9 + 7 . 示例 1: 输入:arr = ...

  7. 基于开源PolarDB-X打造中正智能身份认证业务数据基座

    简介: 在10月25日由阿里云开发者社区.PolarDB开源社区.infoQ联合举办的「开源人说」第三期--<数据库PolarDB专场>沙龙上,中正智能科技有限公司平台软件部研发总监韩毅带 ...

  8. 2022飞天技术峰会:硬之城如何基于 SAE 打造数智化电子工业互联网平台

    简介: 全球数字化时代已经到来,数字经济正推动生产方式.生活方式和治理方式的深刻变化,成为重组全球要素资源,重塑经济结构,改变全球竞争格局的关键力量. 本文根据硬之城 CEO 李六七先生在峰会上的分享 ...

  9. 宏杉科技加入阿里云PolarDB开源数据库社区

    简介: 宏杉科技签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手. 宏杉科技签署阿里巴巴开源CL ...

  10. 怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东

    简介: 跟郭旭东聊过之后,我对程序员的敬佩又多一分.这个92年的开发者,难能可贵地兼备朝气蓬勃的技术能量与长远深刻的行业洞见.独自承担DevOps平台从0到1的所有工作,我打趣说超级开发者不过如此,他 ...