当前位置: 首页 > news >正文

Java基础面试题(3)—Java(String字符串的存储方式,字面量)

前言

学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。

之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆

使用 new String(“hhhhh”)语句在Java中会创建多少个对象?

会创建一个或两个字符串对象。

主要有两种情况
1.如果字符串常量池中不存在字符串对象“hhhhh”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。

2.如果字符串常量池中已存在字符串对象“hhhhhh”的引用,则只会在堆中创建1个字符串对象“hhhhh”

🧩扩展
是不是很懵,刚开是看的时候,我也很懵🤯,简单去理解的话就是字符串的存储方式

  1. Java 的内存主要分为
  • 堆(Heap):对象实例存储在这里
  • 栈(Stack):局部变量、方法调用
  • 方法区(Method Area):类信息、运行时常量池
  • 字符串常量池(String Pool):在堆中(Java 7+),用于缓存字符串字面量
  1. 创建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. 其中老是提到字面量,再解释一下它是什么

来从概念,分类和内存中来了解一下:

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.字面量到底存储在哪里?

在这里插入图片描述

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

…。。。。。。。。。。。…请添加图片描述

…。。。。。。。。。。。…

http://www.dtcms.com/a/335573.html

相关文章:

  • docker常用命令详解
  • [GLM-4.5] LLM推理服务器(SGLang/vLLM) | 工具与推理解析器
  • 03高级语言逻辑结构到汇编语言之逻辑结构转换if (...) {...} else if {...} else {...}
  • java设计模式之迪米特法则使用场景分析
  • C++ 特殊类设计与单例模式解析
  • USB 2.0声卡
  • STL——set map
  • 机器学习--PCA降维
  • 功能强大!开源免费的视频翻译、音视频转录工具
  • LLM应用终极评估指南
  • 一键管理 StarRocks:简化集群的启动、停止与状态查看
  • 《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》
  • 《PEFLL: Personalized Federated Learning by Learning to Learn》——论文阅读
  • 数据电台询价的询价要求
  • 论文阅读-Gated CRF Loss for Weakly Supervised Semantic Image Segmentation
  • 【前端面试题】JavaScript核心面试题解析
  • Linux安装及远程连接知识实践
  • 【*正确*题解|两种做法】 [JLOI2013] 洛谷 P3256 赛车[半平面交/单调栈]
  • OmniDrive论文速读
  • 在云服务器上部署springBoot+vue前后端分离项目
  • 数据结构代码分享-1 顺序表
  • 数字人视频互动技术对比
  • 云计算-k8s实战指南:从 ServiceMesh 服务网格、流量管理、limitrange管理、亲和性、环境变量到RBAC管理全流程
  • Day07 缓存商品 购物车
  • 【远程桌面】从RustDesk服务器看UDP对比WebRTC
  • es下载、安装、部署以及集成和mysql数据同步
  • 给纯小白的Python操作Word笔记
  • gin结合minio来做文件存储
  • The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
  • css: word pacing属性