Java基础面试题(3)—Java(String字符串的存储方式,字面量)
前言
学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。
之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆
使用 new String(“hhhhh”)语句在Java中会创建多少个对象?
会创建一个或两个字符串对象。
主要有两种情况
1.如果字符串常量池中不存在字符串对象“hhhhh”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。
2.如果字符串常量池中已存在字符串对象“hhhhhh”的引用,则只会在堆中创建1个字符串对象“hhhhh”
🧩扩展
是不是很懵,刚开是看的时候,我也很懵🤯,简单去理解的话就是字符串的存储方式:
- Java 的内存主要分为:
- 堆(Heap):对象实例存储在这里
- 栈(Stack):局部变量、方法调用
- 方法区(Method Area):类信息、运行时常量池
- 字符串常量池(String Pool):在堆中(Java 7+),用于缓存字符串字面量
- 创建String对象的两种方式:
(1)直接赋值:
String name = “哈哈哈哈哈”;
String schoolName = “家里蹲”;
(2)用new关键字:
1.public String();:创建空白字符串
2.public String(String Original);根据传入字符串创建字符串
3.public String(char[] chs); 根据字符数组创建字符串对象
4.public String(byte [] chs); 根据字节数组创建字符串对象
🙌在内存储存方式来解释一下区别:
✅ 情况1:直接赋值 String name = “哈哈哈”;
执行过程:
- JVM 遇到字面量 “哈哈哈哈”
- 检查字符串常量池中是否有内容为 “哈哈哈” 的字符串对象
- 如果没有:在堆中创建一个 String 对象,并放入常量池
- 如果有:直接复用,不创建新对象
- 变量 name 直接指向常量池中的对象
内存图示:
✅ 情况2:使用 new String(“hhhhh”)
-
字符串字面量 “hhhhh” 的处理:
当JVM遇到字符串字面量 “hhhhh” 时,它会首先检查字符串常量池(String Pool)中是否已经存在内容相同的字符串对象。- 如果不存在:JVM会在堆中创建一个 String 对象,将其放入字符串常量池,并将该对象的引用返回。此时创建了1个对象(在常量池中)。
- 如果已存在:JVM直接使用常量池中已有的对象,不会创建新的对象。
-
new String(…) 的处理:
new 关键字总是会在堆(heap)中创建一个新的 String 对象,无论字符串常量池中是否存在相同内容的字符串。这个新对象的内容会复制自参数(即 “hhhhh” 或其引用)。
- 其中老是提到字面量,再解释一下它是什么:
来从概念,分类和内存中来了解一下:
1.在编程语言中,字面量(Literal)指的是在源代码中直接表示一个固定值的符号或符号组合。它是一种直接写出数据值的方式,不需要通过变量名或计算过程来获取。
2.常见的字面量类型(以 Java 为例):
- 字符串字面量(String Literal)
- 用双引号括起来的文本。
例如:“Hello”, “hhhhh”, “” - 这些都是字符串字面量。它们直接表示一个字符串值。
- 用双引号括起来的文本。
- 整数字面量(Integer Literal)
- 直接写出的整数。
例如:123, -456, 0, 0xFF(十六进制)
- 直接写出的整数。
- 浮点数字面量(Floating-point Literal)
- 直接写出的小数或科学计数法表示的数。
例如:3.14, -0.001, 2.5e3(表示 2500.0)
- 直接写出的小数或科学计数法表示的数。
- 布尔字面量(Boolean Literal)
- 只有两个:true 和 false
- 字符字面量(Character Literal)
- 用单引号括起来的单个字符。
例如:‘A’, ‘1’, ‘\n’
- 用单引号括起来的单个字符。
- 空字面量(Null Literal)
- null,表示一个空引用。
3.字面量到底存储在哪里?
小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)
…。。。。。。。。。。。…
…。。。。。。。。。。。…