JDK源码阅读-------自学笔记(十一)(java.lang.String包装类)
核心要点
- 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包装类)的更多相关文章
- JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)
一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...
- JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)
Vector 向量 Vector简述 1).Vector底层是用数组实现的List 2).虽然线程安全,但是效率低,所以并不是安全就是好的 3).底层大量方法添加synchronized同步标记,sy ...
- JDK源码阅读-------自学笔记(五)(浅析数组)
一.数组基础 1.定义和特点 数组也可以看做是对象,数组变量属于引用类型,数组中每个元素相当于该队形的成员变量,数组对象存储在堆中. 2.初始化数组 常用类初始化 // 整型初始化 int[] int ...
- JDK源码阅读-------自学笔记(二十四)(java.util.LinkedList 再探 自定义讲解)
一.实现get方法 1.一般思维实现思路 1).将对象的值放入一个中间变量中. 2).遍历索引值,将中间量的下一个元素赋值给中间量. 3).返回中间量中的元素值. 4).示意图 get(2),传入角标 ...
- JDK源码阅读-DirectByteBuffer
本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计.但是他是一个抽象类,真正的实现分为两类:HeapB ...
- JDK源码阅读(三):ArraryList源码解析
今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...
- JDK源码阅读(一):Object源码分析
最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...
- 利用IDEA搭建JDK源码阅读环境
利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...
- JDK源码阅读-FileOutputStream
本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流. 打开文件 public FileOutputStream(File fil ...
- JDK源码阅读-FileInputStream
本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流. 打开文件 我们来看看FileIntputStream打开文件时,做了什么 ...
随机推荐
- 李东山:如何让 OpenHarmony 支持低功耗蓝牙芯片 GR551x
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 李东山 深圳市汇顶 ...
- 一图读懂HUAWEI HiAI Foundation
作为华为端侧AI的创新开放平台,HMS Core的HUAWEI HiAI Foundation开放AI算力,助力AI应用高效开发,同时联合多领域打造AI生态,实现日调用600亿次的突破,助力AI生态繁 ...
- 百度unit闲聊机器人
import json import random import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK client_id = & ...
- (已解决)安装PyMySQL出现问题--'pip' 不是内部或外部命令,也不是可运行的程序 或批处理文件
问题描述: 输入cmd,进入命令窗口,输入pip install pymysql时候出现下面的问题: 然后进入python环境中去输入还是报错: 问题原因:环境变量配置出错,cmd下无法调用pip程序 ...
- 力扣319(java)-灯泡开关(中等)
题目: 初始时有 n 个灯泡处于关闭状态.第一轮,你将会打开所有灯泡.接下来的第二轮,你将会每两个灯泡关闭第二个. 第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开).第 i 轮 ...
- 从no-code到low-code:企业级hpaPaaS的未来
简介: 本文将简单谈一谈基于 no-code > low-code > pro-code 渐进式思路的研发体系. 引子 宜搭负责人骁勇给我举过一个例子,我们小时候逢年过节穿的衣服,都是去裁 ...
- 5G 和云原生时代的技术下半场,视频化是最大最新的确定性
------------恢复内容开始------------ null ------------恢复内容结束------------
- 带你体验云原生场景下 Serverless 应用编程模型
简介: 阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC.ECI 工作负载进行统一应用编排,支持事件驱动.自动弹性,为您提供统一的 Serverless 应 ...
- [Caddy2] Caddyfile 概念预览
结构 块: 所有的指令必须在 { } 块中,如果只有一个站点,则块标记可以省略. 全局的配置块可以放在最上方,其次是站点的配置块. 指令: 指令是服务于站点配置的关键词. 关键词和引号: 空格在 Ca ...
- [FAQ] 夏玉米 按规则查询域名靠谱吗 ?
很早就有一个网站叫 夏玉米,可以按规则查询和注册域名,那么它真如我们想的那样 可以找到好域名吗? 虽然看起来很好用,实际上夏玉米的查询只是针对它自己的数据库,不包含未在其平台注册的域名,所以大家要失望 ...