1 package com.bytezero.stringclass;
2
3 import com.sun.tools.javac.Main;
4 import jdk.jfr.StackTrace;
5 import org.junit.Test;
6
7 import java.util.Locale;
8
9 /**
10 *String的使用
11 *
12 *
13 *
14 * @author Bytezero1·zhenglei! Email:420498246@qq.com
15 * create 2021-10-19 10:34
16 */
17 public class StringTest {
18
19
20
21
22
23
24
25 /*
26 结论:
27 1.常量与常量的拼接结构在常量池,且常量池中不会存在相同内容的常量
28 2.只要其中有一个是变量,结构就在堆中
29 3.如果拼接的结果调用intern()方法,返回值就是在常量池中
30
31
32 */
33 @Test
34 public void test3(){
35 String s1 = "javaEE";
36 String s2 = "hadoop";
37
38 String s3 = "javaEEhadoop";
39 String s4 = "javaEE"+"hadoop";
40
41 String s5 = s1 + "hadoop";
42 String s6 = "javaEE" + s2;
43 String s7 = s1 +s2;
44
45 System.out.println(s3 == s4); //true
46 System.out.println(s3 == s5); //false
47 System.out.println(s3 == s7); //false
48 System.out.println(s3 == s6); //false
49 System.out.println(s5 == s6); //false
50 System.out.println(s5 == s7); //false
51 System.out.println(s6 == s7); //false
52
53 String s8 = s5.intern();//返回得到的s8使用的常量池中已经存在的 "javaEEhadoop"
54 System.out.println(s3 == s8); //true
55
56 System.out.println("**************************");
57 String s9 = s6.intern();//返回得到的s8使用的常量池中已经存在的 "javaEEhadoop"
58 System.out.println(s3 == s9); //true
59
60
61 }
62
63
64
65
66
67 /*
68
69 String 的实例化方式:
70 方式一:通过字面量定义的方式
71 方式二:通过new + 构造器的方式
72 */
73 @Test
74 public void test2(){
75
76 //通过字面量定义的方式:此时的 s1 和 s2 的数据“zhenglei”声明在方法区中的字符串常量池中
77 String s1 = "zhenglei";
78 String s2 = "zhenglei";
79
80 //通过 new + 构造器的方式:此时的S3 和 S4保存的地址值,是数据在堆空间中开辟空间以后对应的
81 //地址值。
82 String s3 = new String("zhenglei");
83 String s4 = new String("zhneglei");
84
85 System.out.println(s1 == s2); //true
86 System.out.println(s1 == s3); //false
87 System.out.println(s1 == s4); //false
88 System.out.println(s3 == s4); // false
89
90
91 }
92
93 /*
94 String:字符串,使用一对" "引起来表示
95 1.String 声明为final的,不可被继承
96 2.String实现了 Serializable接口:表示字符串时支持序列化的。
97 实现了Comparable接口,表示Sting可以比较大小
98 3.String内部定义了final char[] value用于储存字符串数据
99 4.String:代表不可变的字符序列,简称:不可变性
100 体现:1.当都对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的
101 value进行赋值
102 2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能
103 使用原有的value进行赋值
104 3.当调用Stringe的replace()方法修改指定字符或字符串时,也需要重新指定
105 内存区域赋值,不能使用原有的value进行赋值.
106
107
108 5.通过字面量的方式(区别于 new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
109 6.字符串常量池中是不会储存相同内容的字符串的
110
111 String s = new String("abc"); 方式创建对象,在内存中创建了几个对象?
112 两个:一个是堆空间中new结构,另一个是char[]对应的常量池的数据:“abc”
113
114
115
116 String 对象的创建
117 String str = "hello";
118
119 //从本质上this.value = new char[0];
120 String s1 = new String();
121
122 //this.value = original.value;
123 String s2 = new String(String original);
124
125 //this.value = Arrays.copyOf(value,value.length);
126 String s3 = new String(char[] a);
127
128 String s4 = new String(char[] a,int startIndex,int count);
129
130
131
132
133
134
135 */
136 @Test
137 public void test1(){
138
139 String s1 = "abc"; //字面量的定义方式
140 String s2 = "abc"; //
141 s1 = "Hello";
142
143 System.out.println(s1 == s2); //地址值
144
145 System.out.println(s1); //Hello
146 System.out.println(s2); //abc
147
148 System.out.println("********************************");
149 String s3 = "abc";
150 s3 += "def";
151 System.out.println(s3); //abcdef
152 System.out.println(s2);
153
154 System.out.println("********************************");
155 String s4 = "abc";
156 String s5 = s4.replace('a', 'm');
157 System.out.println(s4); //abc
158 System.out.println(s5); //mbc
159 }
160 }

Java 常用类 String的使用的更多相关文章

  1. Java 常用类String类、StringBuffer类

    常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...

  2. 深入理解Java常用类----String

         Java中字符串的操作可谓是最常见的操作了,String这个类它封装了有关字符串操作的大部分方法,从构建一个字符串对象到对字符串的各种操作都封装在该类中,本篇我们通过阅读String类的源码 ...

  3. 深入理解Java常用类----String(二)

    上篇介绍了String类的构造器,获取内部属性等方法,最后留下了最常用的局部操作函数没有介绍,本篇将接着上篇内容,从这些最常见的函数的操作说起,看看我们日常经常使用的这些方法的内部是怎么实现的.第一个 ...

  4. java常用类-String类

    * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象. * B:字符串是 ...

  5. java常用类String

    String: String类: 代表字符串 是一个final类,代表不可变的字符序列 字符串是常量,用双引号引起来表示.值在创建后不可更改 String对象的字符内容是存储在一个字符数组Value[ ...

  6. Java常用类String的面试题汇总

    比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值 ...

  7. Java常用API(String类)

    Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...

  8. Java常用类:包装类,String,日期类,Math,File,枚举类

    Java常用类:包装类,String,日期类,Math,File,枚举类

  9. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  10. Java常用类学习笔记总结

    Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...

随机推荐

  1. 🛠 开源即时通讯(IM)项目OpenIM源码部署指南

    OpenIM的部署涉及多个组件,并支持多种方式,包括源码.Docker和Kubernetes等.这要求在确保不同部署方式之间的兼容性同时,还需有效管理各版本之间的差异.确实,这些都是复杂的问题,涉及到 ...

  2. windows加壳程序WinLicense与Themida

    反调试提示 开了Procmon.exe之后启动游戏会弹出这个框,这个是程序加壳之后的反外挂,反调试提示框. WinLicense A monitor program has been found ru ...

  3. 强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战

    强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法.双延迟深度确定性策略梯度TD3算法详解项目实战 1.定义算法 1.1 定义模型 !pip uninstall -y par ...

  4. 2.5 PE结构:导入表详细解析

    导入表(Import Table)是Windows可执行文件中的一部分,它记录了程序所需调用的外部函数(或API)的名称,以及这些函数在哪些动态链接库(DLL)中可以找到.在Win32编程中我们会经常 ...

  5. 设计模式-2 简单工厂模式Factory Method

    设计模式-2 简单工厂模式 1 意图: 定义一个用户创建对象的接口,让子类决定实例化那个类.Factory Method使一个类的实例化延迟到其子类 使用场景:将一个类的实例化延迟到其子类结构: 优缺 ...

  6. webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式

    webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式 第一篇文章发过后,出人意料的是,收到了博客园某一位用户的狂喷[注:本系列文章会同步发布到cs ...

  7. Java Calendar 多用,日期 加减

    服务需要订购一个月,订购一个月 不等于增加 30天:若是1,3,5的话应该 31天,要善用 Calendar public static void main(String[] args) throws ...

  8. 麒麟V10虚拟机安装(详细)

    现在国企和央企单位都在做国产化适配工作,服务器采用:中科曙光(海光Hygon).中科德泰(龙芯Loongson).宝德(鲲鹏Kunpeng)等国产配备国产处理器的服务器:数据库采用:人大金仓(King ...

  9. Codeforces Round #824 (Div. 2) A-E

    比赛链接 A 题解 知识点:贪心,数学. 注意到三段工作时间一共 \(n-3\) 天,且天数实际上可以随意分配到任意一段,每段至少有一天,现在目的就是最大化段差最小值. 不妨设 \(l_1<l_ ...

  10. Sentinel 源码学习

    引入依赖 <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-co ...