提交 5539783e 编写于 作者: 沉默王二's avatar 沉默王二 💬

字符串和数组

上级 43c4218d
......@@ -85,7 +85,21 @@ export const sidebarConfig = sidebar({
],
},
{
text: "2.3 面向对象编程",
text: "2.3 数组&字符串",
collapsable: true,
children: [
"array/array",
"array/print",
"string/immutable",
"string/constant-pool",
"string/intern",
"string/equals",
"string/join",
"string/split",
],
},
{
text: "2.4 面向对象编程",
collapsable: true,
children: [
{
......@@ -161,46 +175,6 @@ export const sidebarConfig = sidebar({
],
},
{
text: "2.4 字符串&数组",
collapsable: true,
children: [
{
text: "字符串为什么是不可变的",
link: "string/immutable",
},
{
text: "字符串常量池",
link: "string/constant-pool",
},
{
text: " String#intern",
link: "string/intern",
},
{
text: "字符串比较",
link: "string/equals",
},
{
text: "字符串拼接",
link: "string/join",
},
{
text: "字符串分割",
link: "string/split",
},
{
text: "数组",
link: "array/array",
},
{
text: "打印数组",
link: "array/print",
},
],
},
{
text: "2.5 集合框架(容器)",
collapsable: true,
......@@ -908,6 +882,7 @@ export const sidebarConfig = sidebar({
"nice-article/weixin-githubxbkdjavajccjyh.md",
"nice-article/weixin-shejmsnb.md",
"nice-article/weixin-mozdsdzfjavableetcodetxxk.md",
"nice-article/weixin/sulwgalcpdssbjavakfsc.md",
"nice-article/yuanyifeng-c-language.md",
"nice-article/bat-shuati.md",
"nice-article/weixin-piaolwzjztqdtskwlzfpdf.md",
......
......@@ -36,6 +36,7 @@ actions:
- [👏下载→GitHub星标115k+的Java教程](nice-article/weixin-githubxbkdjavajccjyh.md)
- [👏下载→重学Java设计模式](nice-article/weixin-shejmsnb.md)
- [👏下载→Java版LeetCode刷题笔记](nice-article/weixin-mozdsdzfjavableetcodetxxk.md)
- [👏下载→阿里巴巴Java开发手册](nice-article/weixin/sulwgalcpdssbjavakfsc.md)
- [👏下载→阮一峰C语言入门教程](nice-article/yuanyifeng-c-language.md)
- [👏下载→BAT大佬的刷题笔记](nice-article/bat-shuati.md)
- [👏下载→给操作系统捋条线](nice-article/weixin-piaolwzjztqdtskwlzfpdf.md)
......
---
title: 浅入浅出Java数组
shortTitle: Java数组
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java数组
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java数组
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java数组
---
# 深入理解Java数组
“哥,我看你之前的文章里提到,ArrayList 的内部是用数组实现的,我就对数组非常感兴趣,想深入地了解一下,今天终于到这个环节了,好期待呀!”三妹的语气里显得很兴奋。
“二哥,我看你公众号的一篇文章里提到,ArrayList 的内部是用数组实现的,我就对数组非常感兴趣,想深入地了解一下,今天终于到这个环节了,好期待呀!”三妹的语气里显得很兴奋。
“的确是的,看 ArrayList 的源码就一清二楚了。”我一边说,一边打开 Intellij IDEA,并找到了 ArrayList 的源码。
......@@ -66,9 +72,9 @@ int anOtherArray[];
int[] anArray = new int[10];
```
看到了没?上面这行代码中使用了 new 关键字,这就意味着数组的确是一个对象,只有对象的创建才会用到 new 关键字,基本数据类型是不用的。然后,我们需要在方括号中指定数组的长度。
看到了没?上面这行代码中使用了 new 关键字,这就意味着数组的确是一个对象,只有对象的创建才会用到 new 关键字,[基本数据类型](https://tobebetterjavaer.com/basic-grammar/basic-data-type.html)是不用的。然后,我们需要在方括号中指定数组的长度。
这时候,数组中的每个元素都会被初始化为默认值,int 类型的就为 0,Object 类型的就为 null。 不同数据类型的默认值不同,可以参照[之前的文章](https://mp.weixin.qq.com/s/twim3w_dp5ctCigjLGIbFw)
这时候,数组中的每个元素都会被初始化为默认值,int 类型的就为 0,Object 类型的就为 null。 不同数据类型的默认值不同,可以参照[之前的文章](https://tobebetterjavaer.com/basic-grammar/basic-data-type.html)
另外,还可以使用大括号的方式,直接初始化数组中的元素:
......
---
title: 如何优雅地打印Java数组?
shortTitle: 打印Java数组
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,如何优雅地打印Java数组?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java数组
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,如何优雅地打印Java数组?
---
# 如何优雅地打印Java数组?
“哥,之前听你说,数组也是一个对象,但 Java 中并未明确的定义这样一个类。”看来三妹有在用心地学习。
“哥,[之前听你说,数组也是一个对象](https://tobebetterjavaer.com/array/array.html),但 Java 中并未明确的定义这样一个类。”看来三妹有在用心地学习。
“是的,因此数组也就没有机会覆盖 `Object.toString()` 方法。如果尝试直接打印数组的话,输出的结果并不是我们预期的结果。”我接着三妹的话继续说。
......@@ -54,7 +60,7 @@ public final class String
“好了,不讨论这个了。”我怕话题扯远了,扯到我自己也答不出来就尴尬了,赶紧把三妹的思路拽了回来。
“我们来看第一种打印数组的方法,使用时髦一点的 Stream 流。”
“我们来看第一种打印数组的方法,使用时髦一点的[Stream 流](https://tobebetterjavaer.com/java8/stream.html)。”
第一种形式:
......@@ -82,7 +88,7 @@ Arrays.stream(cmowers).forEach(System.out::println);
一枚有趣的程序员
```
没错,这三种方式都可以轻松胜任本职工作,并且显得有点高大上,毕竟用到了 Stream,以及 lambda 表达式
没错,这三种方式都可以轻松胜任本职工作,并且显得有点高大上,毕竟用到了 Stream,以及 [lambda 表达式](https://tobebetterjavaer.com/java8/Lambda.html)
“当然了,也可以使用比较土的方式,for 循环。甚至 for-each 也行。”
......@@ -96,7 +102,7 @@ for (String s : cmowers) {
}
```
“哥,你难道忘了[上一篇](https://mp.weixin.qq.com/s/acnDNH6A8USm_EYIT6i-jA)在讲 Arrays 工具类的时候,提到过另外一种方法 `Arrays.toString()` 吗?”三妹看我一直说不到点子上,有点着急了。
“哥,你难道忘了[上一篇](https://tobebetterjavaer.com/common-tool/arrays.html)在讲 Arrays 工具类的时候,提到过另外一种方法 `Arrays.toString()` 吗?”三妹看我一直说不到点子上,有点着急了。
“当然没有了,我认为 `Arrays.toString()` 是打印数组的最佳方式,没有之一。”我的情绪有点激动。
......
......@@ -2,24 +2,16 @@
title: Java中常用的48个关键字和2个保留字
shortTitle: 48个关键字和2个保留字
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
- Java 保留字
- Java 关键字
description: Java中常用的48个关键字和2个保留字
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,Java中常用的48个关键字和2个保留字
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介,Java 保留字,Java 关键字
- name: description
content: Java中常用的48个关键字和2个保留字
content: Java程序员进阶之路,小白的零基础Java教程,Java中常用的48个关键字和2个保留字
---
“二哥,就我之前学过的这些 Java 代码中,有 public、static、void、main 等等,它们应该都是关键字吧?”三妹的脸上泛着甜甜的笑容,我想她在学习 Java 方面已经变得越来越自信了。
......
......@@ -2,23 +2,16 @@
title: Java命名规范,告别编码 5 分钟,命名 2 小时
shortTitle: Java命名规范
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
- Java 命名规范
description: Java命名规范,告别编码 5 分钟,命名 2 小时
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,Java命名规范,告别编码 5 分钟,命名 2 小时
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介,Java 命名规范
- name: description
content: Java命名规范,告别编码 5 分钟,命名 2 小时
content: Java程序员进阶之路,小白的零基础Java教程,Java命名规范,告别编码 5 分钟,命名 2 小时
---
“二哥,Java 中的命名约定都有哪些呢?”三妹的脸上泛着甜甜的笑容,她开始对接下来要学习的内容充满期待了,这正是我感到欣慰的地方。
......
......@@ -2,25 +2,16 @@
title: Java 中的数据类型(8 种基本数据类型和引用数据类型)
shortTitle: Java 中的数据类型
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
- Java 数据类型
- 基本数据类型
- 引用数据类型
description: Java 中的数据类型(8 种基本数据类型和引用数据类型)
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,Java 中的数据类型(8 种基本数据类型和引用数据类型)
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介,Java 数据类型,基本数据类型,引用数据类型
- name: description
content: Java 中的数据类型(8 种基本数据类型和引用数据类型)
content: Java程序员进阶之路,小白的零基础Java教程,Java 中的数据类型(8 种基本数据类型和引用数据类型)
---
“Java 是一种静态类型的编程语言,这意味着所有变量必须在使用之前声明好,也就是必须得先指定变量的类型和名称。”我吸了一口麦香可可奶茶后对三妹说。
......
......@@ -2,24 +2,16 @@
title: Java流程控制语句(if/switch判断语句和while/do-while/for循环语句)
shortTitle: Java流程控制语句
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 流程控制语句
- Java 判断语句
- Java 循环语句
description: Java流程控制语句(if/switch判断语句和while/do-while/for循环语句)
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,Java流程控制语句(if/switch判断语句和while/do-while/for循环语句)
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 流程控制语句,Java 判断语句,Java 循环语句
- name: description
content: Java流程控制语句(if/switch判断语句和while/do-while/for循环语句)
content: Java程序员进阶之路,小白的零基础Java教程,Java流程控制语句(if/switch判断语句和while/do-while/for循环语句)
---
......
......@@ -2,22 +2,16 @@
title: Java注释:单行、多行和文档注释
shortTitle: Java注释
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 注释
description: Java注释:单行、多行和文档注释
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,Java注释:单行、多行和文档注释
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 注释
- name: description
content: Java注释:单行、多行和文档注释
content: Java程序员进阶之路,小白的零基础Java教程,Java注释:单行、多行和文档注释
---
“二哥,Java 中的注释好像真没什么可讲的,我已经提前预习了,不过是单行注释,多行注释,还有文档注释。”三妹的脸上泛着甜甜的笑容,她竟然提前预习了接下来要学习的知识,有一种“士别三日,当刮目相看”的感觉。
......
......@@ -2,23 +2,16 @@
title: Java 运算符
shortTitle: Java 运算符
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
- Java 运算符
description: 本文主要介绍Java 中的运算符(算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符)的使用
- Java语法基础
description: Java程序员进阶之路,小白的零基础Java教程,本文主要介绍Java 中的运算符(算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符)的使用
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介,Java 运算符
- name: description
content: 本文主要介绍Java 中的运算符(算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符)的使用
content: Java程序员进阶之路,小白的零基础Java教程,本文主要介绍Java 中的运算符(算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符)的使用
---
“二哥,让我盲猜一下哈,运算符是不是指的就是加减乘除啊?”三妹的脸上泛着甜甜的笑容,我想她一定对提出的问题很有自信。
......
......@@ -2,6 +2,13 @@
title: Java程序员进阶之路x沉默王二
isOriginal: true
headerDepth: 1
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶
head:
- - meta
- name: keywords
content: Java,java,springboot,mysql,redis,教程,git,软件,编程,开发,互联网,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门
- name: description
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶
---
<a href="https://tobebetterjavaer.com/zhishixingqiu/">👉 沉默王二-《Java 程序员进阶之路》官方知识星球来啦!!!</a>如果你需要专属Java学习/面试小册/一对一交流/简历修改/专属求职指南/学习打卡,不妨花 3 分钟左右看看星球的详细介绍: <a href="https://tobebetterjavaer.com/zhishixingqiu/">《Java 程序员进阶之路》详细介绍 </a>(一定要确定自己真的需要再加入,一定要看完详细介绍之后再加我)。
......@@ -111,7 +118,16 @@ headerDepth: 1
- [Java流程控制语句](basic-grammar/flow-control.md)
- [Java运算符](basic-grammar/operator.md)
### 数组&字符串
- [浅入浅出Java数组](array/array.md)
- [如何优雅地打印Java数组?](array/print.md)
- [为什么String是不可变的?](string/immutable.md)
- [深入理解Java字符串常量池](string/constant-pool.md)
- [深入解析String.intern()方法](string/intern.md)
- [Java如何判断两个字符串是否相等?](string/equals.md)
- [最优雅的Java字符串拼接是哪种方式?](string/join.md)
- [如何在Java中优雅地分割String字符串?](string/split.md)
### Java面向对象编程
......@@ -135,17 +151,6 @@ headerDepth: 1
- [Java枚举(enum)](basic-extra-meal/enum.md)
- [大白话说Java反射:入门、使用、原理](basic-extra-meal/fanshe.md)
### 字符串&数组
- [为什么String是不可变的?](string/immutable.md)
- [深入了解Java字符串常量池](string/constant-pool.md)
- [深入解析 String#intern](string/intern.md)
- [Java判断两个字符串是否相等?](string/equals.md)
- [Java字符串拼接的几种方式](string/join.md)
- [如何在Java中优雅地分割String字符串?](string/split.md)
- [深入理解Java数组](array/array.md)
- [如何优雅地打印Java数组?](array/print.md)
### 集合框架(容器)
- [Java集合框架](collection/gailan.md)
......
---
title: 👏下载→最全最硬核的Java面试 “备战” 资料
shortTitle: Java面试 “备战” 资料
shortTitle: 下载→Java面试备战资料
category:
- 学习资源
tag:
- PDF
head:
- - meta
- name: description
content: 下载→最全最硬核的Java面试 “备战” 资料
- - meta
- name: keywords
content: PDF,Java 面试资料,java面试准备,java面试题,java面试指南,java 面试题,java面试题2022
---
大家好,我是二哥呀!分享一下今天整理汇总的一些 Java 面试相关的 PDF 资料,希望对需要的小伙伴有帮助!
......
---
title: 👏下载→深入浅出Java多线程
shortTitle: 深入浅出Java多线程
title: 👏下载→深入浅出Java多线程PDF
shortTitle: 下载→深入浅出Java多线程
category:
- 学习资源
tag:
- PDF
head:
- - meta
- name: description
content: 下载深入浅出Java多线程PDF
- - meta
- name: keywords
content: 深入浅出Java多线程,深入浅出Java多线程 PDF,深入浅出java多线程 pdf,深入浅出Java多线程 下载,Java多线程入门,java并发编程实战,java线程池,java多线程 PDF,Java 多线程 书籍
---
你好,我是二哥。对于一个 Java 程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是 Java 语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更能考验一个程序员的内功。
......
---
title: 👏下载→阿里巴巴Java开发手册
shortTitle: 下载→阿里巴巴Java开发手册
description: 下载→阿里巴巴Java开发手册
author: 沉默王二
category:
- 学习资源
tag:
- PDF
---
说起嵩山,我就想起乔峰,想起慕容复,以及他们两位老爹在少林寺大战的场景。当然了,最令我印象深刻的就是那位默默无闻,却一鸣惊人的扫地僧啊。这次,阿里出品的嵩山版 Java 开发手册的封面就有一个扫地僧,唉,这就厉害了呀!
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-75a3beae-5bee-492d-9769-666f578ceccc.jpg)
嵩山少林寺位于河南省登封市,始建于北魏太和十九年,号称“天下第一名刹”。这意味着什么?阿里出品的嵩山版 Java 开发手册,是迄今为止最重量级的。
上个版本叫泰山版,更新于 2020 年 4 月 22 号,版本出来的第一时间,我就给大家分享了。我相信,看过的小伙伴一定大有所获。毕竟《阿里巴巴 Java 开发手册》这本小册子虽然只有几十页,但讲的主要是一些典型的开发规约、编程规范、以及最佳实践,已经成为业界普遍遵循的开发规范。
那新版主要更新了哪些内容呢?我来挑一些重点,和大家分享下。
## 01、新增前后端规约 14 条
前后端我都开发过,所以就挑一些我认为比较关键的规约来给大家推荐一下。好的规约能够让前后端工程师在开发的过程中减少很多不必要的麻烦,毕竟现在都追求前后端分离,接口对接的过程中就必须得有一定的规则遵守,不然扯起皮了就不妙了。
* 前后端交互的 API,需要明确协议、域名、路径、请求方式、请求内容、状态码、响应体。
* 前后端数据列表相关的接口,如果为空,就是没有数据的时候,应该返回空数组 \[\] 或者空集合 {},这样可以省去判 null 的操作。
* 服务端发生错误时,返回给前端的响应信息必须包含 HTTP 状态码,errorCode、 errorMessage(方便追踪错误)、用户提示信息四个部分。
* 涉及到超大整数的场景,服务端应该使用 String 类型返回,避免使用 Long。
* 服务端返回的数据,尽量使用 JSON 而非 XML 格式。
## 02、新增禁止任何歧视性用语的约定
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-8cc71cfc-e133-41bd-94b6-a2b27d6f3758.jpg)
虽然互联网越来越开放,但有些用语还是要注意一下(尽量和谐)。记得之前 MySQL 的一些关键字都被迫做了调整。
## 03、新增涉及敏感操作的情况下日志需要保存六个月的约定
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-3209b64a-9b20-4f70-8028-d9b089164caa.jpg)
涉及到法律的地方还是在开发的时候注意一下。
## 04、修正 BigDecimal 类中关于 compareTo 和 equals 的等值比较
关于这一点,我之前在文章里详细地阐述了,浮点数之间的比较不能使用“==”操作符,而 BigDecimal 之间不能使用 `equals()` 比较。
[我去,脸皮厚啊,竟然使用==比较浮点数?](https://mp.weixin.qq.com/s?__biz=MzIxNzQwNjM3NA==&mid=2247488219&idx=1&sn=a847557dae132769797fe19181957c03&scene=21#wechat_redirect)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-158bd290-5df1-4df8-ab59-ada0f57a7516.jpg)
## 05、修正 HashMap 关于 1024 个元素扩容的次数
泰山版说是扩容 7 次。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-c2dbe80a-aee4-40e9-9448-0a243d35ea7d.jpg)
嵩山版修正为扩容 8 次。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-1cf3c985-9748-4e83-9473-11356bb566df.jpg)
## 06、修正架构分层规范与相关说明
泰山版的应用分层如下图所示。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-9a08658c-a8f7-4af6-a7b4-63f1bd0f9edd.jpg)
嵩山版的应用分层修改为如下图所示。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-33efc94e-746c-4e7e-961c-2bf95b14a371.jpg)
## 07、最后
如果你想成为一名优秀的 Java 工程师,那么这份手册上的内容几乎是必须要掌握的。是不是已经迫不及待想要下载这份手册了?
微信搜索「**沉默王二**」回复「**手册**」就可以免费获取了,当然你也可以扫描下面的二维码后回复,赶紧赶紧。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-sulwgalcpdssbjavakfsc-c4930a24-11d8-45e3-ad23-b45ca296dba1.jpg)
最后,我衷心地祝福你,希望你能学有所成,to be better,奥利给!
......@@ -2,24 +2,16 @@
title: 安装集成开发环境Intellij IDEA
shortTitle: 安装集成开发环境IDEA
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
- Intellij IDEA 安装
- IDEA 安装
description: Intellij IDEA的安装和配置
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,Intellij IDEA的安装和配置
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介,Intellij IDEA 安装,IDEA 安装
- name: description
content: Intellij IDEA的安装和配置
content: Java程序员进阶之路,小白的零基础Java教程,Intellij IDEA的安装和配置
---
IntelliJ IDEA 简称 IDEA,是业界公认为最好的 Java 集成开发工具,尤其是在代码自动提示、代码重构、代码版本管理、单元测试、代码分析等方面有着亮眼的发挥。
......
......@@ -2,22 +2,16 @@
title: 编写第一个Java程序:Hello World
shortTitle: 编写第一个Java程序:Hello World
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java Hello World
description: 编写第一个Java程序:Hello World
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,编写第一个Java程序:Hello World
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java Hello World
- name: description
content: 编写第一个Java程序:Hello World
content: Java程序员进阶之路,小白的零基础Java教程,编写第一个Java程序:Hello World
---
第一个 Java 程序非常简单,代码如下:
......
......@@ -2,22 +2,16 @@
title: Java的优势
shortTitle: Java的优势
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 优势
description: Java的优势
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,Java的优势
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 优势
- name: description
content: Java的优势
content: Java程序员进阶之路,小白的零基础Java教程,Java的优势
---
尽管 Java 已经 25 岁了,但仍然“宝刀未老”。在 Stack Overflow 2019 年流行编程语言调查报告中,Java 位居第 5 位,有 41% 的受调开发者认为 Java 仍然是一门受欢迎的编程语言。
......
......@@ -2,22 +2,16 @@
title: Java发展简史
shortTitle: Java发展简史
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
description: Java发展简史
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,Java发展简史
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介
- name: description
content: Java发展简史
content: Java程序员进阶之路,小白的零基础Java教程,Java发展简史
---
20 世纪 90 年代,单片式计算机系统诞生。单片式计算机系统不仅廉价(之前的计算机非常庞大,并且昂贵),而且功能强大,可以大幅度提升消费性电子产品的智能化程度。
......
......@@ -2,22 +2,16 @@
title: 安装Java开发工具包JDK
shortTitle: 安装Java开发工具包JDK
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- JDK 安装
description: JDK的安装和配置
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,JDK的安装和配置
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,JDK 安装
- name: description
content: JDK的安装和配置
content: Java程序员进阶之路,小白的零基础Java教程,JDK的安装和配置
---
因为Java程序必须运行在JVM之上,所以我们 Java 程序员在学习 Java 之前,要做的第一件事情就是安装JDK。
......
......@@ -2,22 +2,16 @@
title: Java简介
shortTitle: Java简介
category:
- Java 核心
- Java核心
tag:
- Java
- Java SE
- Java 基础
- Java 教程
- Java 程序员进阶之路
- Java 入门
- Java 简介
description: Java 简介,什么是Java?
- Java概述
description: Java程序员进阶之路,小白的零基础Java教程,Java 简介,什么是Java?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,Java 简介
- name: description
content: Java 简介,什么是Java?
content: Java程序员进阶之路,小白的零基础Java教程,Java 简介,什么是Java?
---
......
---
title: 深入理解Java字符串常量池
shortTitle: 深入理解Java字符串常量池
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,深入理解Java字符串常量池
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,深入理解Java字符串常量池
---
# 深入了解Java字符串常量池
“三妹,今天我们来学习一下字符串常量池吧,这是字符串中非常关键的一个知识点。”我话音未落,青岛路小学那边传来了嘹亮的歌声就钻进了我的耳朵,“唱 ~ 山 ~ 歌 ~”
三妹说,“好呀,开始吧,哥。”
......@@ -48,7 +54,7 @@ String s = new String("二哥");
String s1 = new String("二哥");
```
按照我们之前的分析,这两行代码会创建三个对象,字符串常量池中一个,堆上两个。
按照我们之前的分析,这两行代码会创建三个对象,字符串常量池中一个,堆上两个。
再来看下面这个例子:
......@@ -75,7 +81,7 @@ Java 8 之后,移除了永久代,字符串常量池就移到了堆中。
我说,“可以呀。”
- 方法区是 Java 虚拟机规范中的一个概念,就像是一个接口吧;
- 方法区是 Java 虚拟机规范中的一个概念,就像是一个[接口](https://tobebetterjavaer.com/oo/interface.html)吧;
- 永久代是 HotSpot 虚拟机中对方法的一个实现,就像是接口的实现类;
- Java 8 的时候,移除了永久代,取而代之的是元空间,是方法区的另外一个实现。
......@@ -89,4 +95,4 @@ Java 8 之后,移除了永久代,字符串常量池就移到了堆中。
“是的,我现在是彻底搞懂了字符串常量池,哥,你真棒!”三妹说。
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
\ No newline at end of file
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
\ No newline at end of file
---
title: Java如何判断两个字符串是否相等?
shortTitle: 如何判断两个字符串是否相等?
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java如何判断两个字符串是否相等?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,Java如何判断两个字符串是否相等?
---
# Java判断两个字符串是否相等?
“哥,如何比较两个字符串相等啊?”三妹问。
哥,如何比较两个字符串相等啊?”三妹问。
“这个问题看似简单,却在 Stack Overflow 上有超过 370 万的访问量。”我说,“这个问题也可以引申为 `.equals()` 和 ‘==’ 操作符有什么区别。”
“这个问题看似简单,却在 Stack Overflow 上有超过 370 万+的访问量。”我说,“这个问题也可以引申为 `.equals()` 和 ‘==’ 操作符有什么区别。”
- “==”操作符用于比较两个对象的地址是否相等。
- `.equals()` 方法用于比较两个对象的内容是否相等。
......@@ -86,7 +93,7 @@ public static boolean equals(byte[] value, byte[] other) {
}
```
我的 JDK 版本是 Java 11,也就是最新的 LTS(长期支持)版本。该版本中,String 类使用字节数组实现的,所以比较两个字符串的内容是否相等时,可以先比较字节数组的长度是否相等,不相等就直接返回 false;否则就遍历两个字符串的字节数组,只有有一个字节不相等,就返回 false。
我的 JDK 版本是 Java 17,也就是最新的 LTS(长期支持)版本。该版本中,String 类使用字节数组实现的,所以比较两个字符串的内容是否相等时,可以先比较字节数组的长度是否相等,不相等就直接返回 false;否则就遍历两个字符串的字节数组,只有有一个字节不相等,就返回 false。
“嗯,二哥,这段源码不难理解。”三妹自信地说。
......@@ -216,4 +223,4 @@ public boolean contentEquals(CharSequence cs) {
“是的,总体上感觉还是 `Objects.equals()` 比较舒服。”三妹的眼睛是雪亮的,发现了这个方法的优点。
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
\ No newline at end of file
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
\ No newline at end of file
---
title: 为什么String是不可变的?
shortTitle: 为什么String是不可变的?
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,为什么String是不可变的?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,为什么String是不可变的?
---
# 为什么String是不可变的?
我正坐在沙发上津津有味地读刘欣大佬的《码农翻身》——Java 帝国这一章,门铃响了。起身打开门一看,是三妹,她从学校回来了。
“三妹,你回来的真及时,今天我们打算讲 Java 中的字符串呢。”等三妹换鞋的时候我说。
“哦,可以呀,哥。听说字符串的细节特别多,什么字符串常量池了、字符串不可变性了、字符串拼接了、字符串长度限制了等等,你最好慢慢讲,否则我可能一时半会消化不了。”三妹的态度显得很诚恳。
“嗯,我已经想好了,今天就只带你大概认识一下字符串,具体的细节咱们后面再慢慢讲,保证你能及时消化。”
“嗯,我已经想好了,今天就只带你大概认识一下字符串,再说说为什么 String 是不可变的,其他的细节咱们后面再慢慢讲,保证你能及时消化。”
“好,那就开始吧。”三妹已经准备好坐在了电脑桌的边上。
......@@ -37,7 +43,7 @@ public final class String
“第四,StringBuffer、StringBuilder 和 String 一样,都实现了 CharSequence 接口,所以它们仨属于近亲。由于 String 是不可变的,所以遇到字符串拼接的时候就可以考虑一下 String 的另外两个好兄弟,StringBuffer 和 StringBuilder,它俩是可变的。”
“第五,Java 9 以前,String 是用 char 型数组实现的,之后改成了 byte 型数组实现,并增加了 coder 来表示编码。在 Latin1 字符为主的程序里,可以把 String 占用的内存减少一半。当然,天下没有免费的午餐,这个改进在节省内存的同时引入了编码检测的开销。”
“第五,Java 9 以前,[String 是用 char 型数组实现的,之后改成了 byte 型数组实现,并增加了 coder 来表示编码](https://tobebetterjavaer.com/basic-extra-meal/jdk9-char-byte-string.html)。在 Latin1 字符为主的程序里,可以把 String 占用的内存减少一半。当然,天下没有免费的午餐,这个改进在节省内存的同时引入了编码检测的开销。”
“第六,每一个字符串都会有一个 hash 值,这个哈希值在很大概率是不会重复的,因此 String 很适合来作为 HashMap 的键值。”
......@@ -135,4 +141,4 @@ public String concat(String str) {
“那今天就先讲到这吧,后面我们再对每一个细分领域深入地展开一下。你可以找一些资料先预习下,我出去散会心。。。。。”
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
\ No newline at end of file
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
\ No newline at end of file
---
title: 深入解析String.intern()方法
shortTitle: 深入解析String.intern()方法
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,深入解析String.intern()方法
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,深入解析String.intern()方法
---
# 深入解析 String#intern
“哥,你发给我的那篇文章我看了,结果直接把我给看得不想学 Java 了!”三妹气冲冲地说。
“哪一篇啊?”看着三妹面色沉重,我关心地问到。
“就是美团技术团队深入解析 `String.intern()` 那篇啊!”三妹回答。
“就是[美团技术团队深入解析 `String.intern()` 那篇](https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html)啊!”三妹回答。
>https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html
“哦,我想起来了,不挺好一篇文章嘛,深入浅出,精品中的精品,看完后你应该对 String 的 intern 彻底理解了才对呀。”
“哦,我想起来了,不挺好一篇文章嘛,深入浅出,精品中的精品,看完后你应该对 String 的 intern 方法彻底理解了才对呀。”
“好是好,但我就是看不懂!”三妹委屈地说,“哥,还是你亲自给我讲讲吧?”
“好吧,上次学的[字符串常量池](https://mp.weixin.qq.com/s/b69zXknKLIa3FWs0Yj23xA)你都搞清楚了吧?”
“好吧,上次学的[字符串常量池](https://tobebetterjavaer.com/string/constant-pool.html)你都搞清楚了吧?”
“嗯。”三妹微微的点了点头。
......@@ -113,4 +118,4 @@ true
看到三妹一点一滴的进步,我也感到由衷的开心。
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
\ No newline at end of file
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
\ No newline at end of file
---
title: 最优雅的Java字符串拼接是哪种方式?
shortTitle: Java字符串拼接
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,最优雅的Java字符串拼接是哪种方式?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,最优雅的Java字符串拼接是哪种方式?
---
# Java字符串拼接的几种方式
“哥,你让我看的《Java 开发手册》上有这么一段内容:循环体内,拼接字符串最好使用 StringBuilder 的 `append()` 方法,而不是 + 号操作符。这是为什么呀?”三妹疑惑地问。
“哥,你让我看的《[Java 开发手册](https://tobebetterjavaer.com/nice-article/weixin/sulwgalcpdssbjavakfsc.html)》上有这么一段内容:循环体内,拼接字符串最好使用 StringBuilder 的 `append()` 方法,而不是 + 号操作符。这是为什么呀?”三妹疑惑地问。
“好的,三妹,哥来慢慢给你讲。”我回答。
......@@ -370,4 +377,4 @@ public static String join(final Object[] array, String separator, final int star
“嗯,哥,你休息吧,我把这些例子再重新跑一遍。”三妹说。
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
\ No newline at end of file
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
\ No newline at end of file
---
title: 如何在Java中优雅地分割String字符串?
shortTitle: Java字符串分割
category:
- Java核心
tag:
- Java
- 数组&字符串
description: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,如何在Java中优雅地分割String字符串?
head:
- - meta
- name: keywords
content: Java,Java SE,Java 基础,Java 教程,Java 程序员进阶之路,Java 入门,java字符串,String
content: Java程序员进阶之路,小白的零基础Java教程,从入门到进阶,如何在Java中优雅地分割String字符串?
---
# 如何在Java中优雅地分割String字符串?
“哥,我感觉字符串拆分没什么可讲的呀,直接上 String 类的 `split()` 方法不就可以了!”三妹毫不客气地说。
“假如你真的这么觉得,那可要注意了,事情远没这么简单。”我微笑着说。
......@@ -215,4 +221,4 @@ if (cmower.contains(",")) {
“嗯,我把今天的内容温习下,二哥,你休息会。”三妹说。
<img src="http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png">
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册