String类的特点
1.String类的特点

1.java程序中,只要是双引号字符串,就都是String类的对象 如图

只有String这一个类有这种特殊的创建对象方法
我们知道,只有对象才可以通过 点什么来调用方法,而图中s.toString等方法都可以调用,所以s就是String的对象
.
2.字符串在创建之后,内容不可更改 如图

这该如何解释?我们不妨先看看下图

上图中,stu原本是18,张三的,但是却被新创建的对象20,李四给覆盖掉了,导致最终打印出来的是新的对象
所以,上图中的s并不是被改变了内容,而是因为"def"也是双引号字符串,也是一个新的对象,s被新的对象覆盖了,所以打印的是def,但原来的"abc"是没有被改变的

3.String字符串虽然不能改变,但可以共享
如图 打印出来的是false还是true呢?

答案是true,在回答为什么是true之前,我们需要知道一个新的知识——字符串常量池

4.字符串常量池

我们使用内存图对刚才的s1,s2比较进行解释

当执行到s1时,创建出双引号对象"abc",这时,程序会去字符串常量池检查是否有"abc"这个对象,发现没有abc,所以在字符串常量池里创建"abc",然后产生地址,记录给s1

接着执行s2,还是创建双引号对象"abc",程序依旧去字符串常量池检查是否有"abc"这个对象,这时发现存在,那就直接把地址赋给s2

s1和s2的地址都一致,引用数据类型使用==进行比较,比较的是地址值,所以打印的true
.
字符串常量池所在的内存位置

所以,以后字符串常量池基本都出现在堆内存中
String类的特点的更多相关文章
- 标准库String类
下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数. [cpp] view plain copy #include<iostream> #include ...
- 自己实现简单的string类
1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C ...
- C++ string类的实现
c++中string类的实现 今天面试被考到了, 全给忘记了!!! //string类的实现 #include <iostream> #include <string.h> ...
- String类的功能
String类 标红的为较少出现的 1.判断功能 boolean equals(Object obj) :比较字符串内容是否相同,区分大小写 boolean equalsIg ...
- java基础复习:final,static,以及String类
2.final 1)为啥String是final修饰的呢? 自己答: 答案: 主要是为了“效率” 和 “安全性” 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所 ...
- String类和StringBuffer类的区别
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...
- 05_整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明
Question: 整理String类的Length().charAt(). getChars().replace(). toUpperCase(). toLowerCase().trim().toC ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- String类常用方法
1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...
- 运用String类实现一个模拟用户登录程序
package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...
随机推荐
- echo输出
linux中不免经常使用echo进行输出,或输出到屏幕,或输出到文件.但是使用的时候会发现,在想要输出一些需要转义的字符时,例如\t等,它却原样不动的输出了. 使用man命令查看echo的帮助文档,会 ...
- ArchLinux安装后常见问题的解决
Q:UEFI引导grub-install报错:variables are not support on this system A:进入安装u盘的时候是传统引导模式,传统模式下无法安装UEFI启动,解 ...
- 注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,第8篇时只回答了注册中心的工作原理的内容,面试官的第二个问题还没回答,今天再来讲讲各个注册中心的原理,以及区别,最后如何进行选型 上一篇文章:如何设计一个注册 ...
- Solution Set -「AGC 013~015」C~F
目录 「AGC 013C」Ants on a Circle 「AGC 013D」Piling Up ^ 「AGC 013E」Placing Squares ^ 「AGC 013F」Two Faced ...
- 一站式解决方案 :OFD电子证照生成
前言 证照的电子化是一个趋势:可以预计,未来几年内,绝大部分证照都会电子化.电子证照的种类越来越多,应用场景也复杂多样:这就给电子证照规范的制定.电子证照的生成提出了更高的要求.电子证照采用的格式有两 ...
- biancheng-Mybatis框架
目录http://c.biancheng.net/mybatis/ 1MyBatis是什么2MyBatis和Hibernate的区别3MyBatis下载4第一个MyBatis程序5MyBatis核心对 ...
- 萌新赛 sprintf漏洞
首先是个.git源码源码泄露,用githack回复一下源码 源码 <?php $pass=sprintf("and pass='%s'",addslashes($_GET[' ...
- linux实现人脸识别锁定解锁
环境 archlinux 桌面管理器i3wm 登录管理器 slim python 3.10.4 dlib pip install --user -i https://pypi.tuna.tsinghu ...
- oracle配置SGA参数不当导致不能正确启动数据库实例处理
原因:生成环境数据库想要增加数据库内存配置参数SGA_TARGET增加到42G,但是没有配置SGA_MAX_SIZE参数值,导致SHUTDOWN IMMEDIATE停止数据库,再STARTUP启动数据 ...
- 本地部署最强人工智能服务:方案(一)Chatbox+硅基流动(满血DeepSeek R1)
最近DeepSeek的服务器经常出现服务器繁忙,而且本地运行大模型很吃力,我的960m挺吃力的.不过华为后续和硅基流动一起搭建起了DeepSeek的API服务,注册就送14块钱,换算下来 4块/M t ...