从头认识java-11.1 不变的字符串

这一章节我们来讨论一下不变的字符串。

为什么说是不变?

我们先看String 的构造器

public String() {
	this.offset = 0;
	this.count = 0;
	this.value = new char[0];
    }

其中里面的value,我们再看一下:

 /** The value is used for character storage. */
    private final char value[];

value的标识符是final,因此,字符串在编译器里面是不可原地修改。

package com.ray.ch11;

public class Test {
	public static void main(String[] args) {
		String a = "a";
		String b = a.toUpperCase();
		System.out.println(a == b);
	}
}

输出:

false

在转换的过程中,其实是把“a”这个字符串对象复制一份,然后再进行转换。

我们可以点进去toUpperCase方法里面,里面需要注意的有两句:

  System.arraycopy(value, offset, result, 0, firstUpper);

return new String(0, count+resultOffset, result);

第一句是把传入的值复制一份,然后第二句在最后new一个新的字符串出来。

然后,大家可以在String 这个类的源代码里面搜索一下return new String,你会发现,你常用的那些方法,基本都是返回一个新的字符串。

总结:我们这里只是简单的结束一下字符串的可不修改的特性,其实它里面还包括很多内容,但是暂时不做详细展开,大家知道有这个特性即可。

这一章节就到这里,谢谢。

-----------------------------------

目录

时间: 2025-01-05 07:08:52

从头认识java-11.1 不变的字符串的相关文章

JAVA基础——重新认识String字符串

深入剖析Java之String字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串. 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象有三种方法 String s1="我是字符串1"; String s2=new String();//创建一个空的字符串对象 String s3=new String("我是字符串2&q

[Java]#从头学Java# Java大整数相加

重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识.算法.效率什么的都没怎么考虑,就纯粹实现功能而已. 先上代码: 1 package com.tacyeh.common; 2 3 public class MyMath { 4 5 public static String BigNumSum(String... n) { 6 int length = n.length; 7 StringBuilder result = new StringBuilder(); 8 //这里判断其实不需

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

                                                                              解析9进制,11进制的字符串为10进制的数字输出 描述: 解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位.解析后以10进制的数字输出.如果解析到非法字符串则返回-1 9进制: 9进制的数的范围:0,1,2,3,4,5,6,7,8 9进制的开始为:0V或者0

java怎么实现统计一个字符串中字符出现的次数

问题:假设字符串仅仅保护a-z 的字母,java怎么实现统计一个字符串中字符出现的次数?而且,如果压缩后的字符数不小于原始字符数,则返回. 处理逻辑:首先拆分字符串,以拆分出的字符为key,以字符出现次数为value,存入Map中. 源码如下: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 public class TestCompress { 6 7 public sta

Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码可以看出 Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年. 现在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,至少我没有发现有公司在生产环境应用的,那就是找死. 现在 Java 11 长期支持,也已

Java 11正式发布,这几个逆天新特性教你写出更牛逼的代码

就在前段时间,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用! 这无疑对我们来说是一大好的消息.作为一名java开发者来说,虽然又要去学习和了解java11,但内心还是欣慰的.我想至少你和我一样的心情:Java在手,天下我有! 今天我们来看一下Java 11到底是什么.他有什么特别的.到底要不要升级到Java 11. Java 11有什么特别的 在Oracle官网中,进入下载页面,第一个可供下载的JDK版本已经提换成了Java SE 11 (LTS),

java中+(加号或字符串连接)运算顺序的问题

由于java中+(加号或字符串连接)的运算顺序是从左向右的,所以一下程序的输出会得到两个不同的结果 1 public class Test { 2 public static void main(String[] args) { 3 System.out.println("ddd"+7+5); 4 System.out.println(7+5+"ddd"); 5 6 } 7 } 结果为ddd75 12ddd

JAVA的整型与字符串相互转换

JAVA的整型与字符串相互转换 1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 String ? A

(转)JAVA的整型与字符串相互转换

JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或         i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 Str

Java按照字节来截取字符串的工具,不会出现半个汉字

原文:Java按照字节来截取字符串的工具,不会出现半个汉字 源代码下载地址:http://www.zuidaima.com/share/1550463396842496.htm Java 按照字节来截取字符串的工具,不会出现半个汉字.一个中文两个字节,一个英文字符只占 1 个字节 1. 通常我们用于前端显示的时候,防止标题过长.... /* * Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.com