当前位置: 首页 > 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.xdnf.cn/news/1315153.html

相关文章:

  • 链表OJ题讲解---试金石含金量
  • 6个日常工作中常用的工作法:清单工作法、PDCA循环、SMART原则、6W2H 分析法等方法
  • CSS中linear-gradient 的用法
  • 《Vuejs设计与实现》第 14 章(内建组件和模块)
  • Docker+飞算JavaAI=未来:全流程容器化AI开发实战
  • Matlab课程实践——基于MATLAB设计的计算器软件(简单、科学、电工、矩阵及贷款计算)
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • Mitt 事件发射器完全指南:200字节的轻量级解决方案
  • fastadmin 后台列表自定义搜索
  • 【递归、搜索与回溯算法】记忆化搜索
  • 当 AI 开始 “理解” 情感:情感计算技术正在改写人机交互规则
  • KingbaseES:一体化架构与多层防护,支撑业务的持续稳定运行与扩展
  • geekbench riscv镜像下载
  • 【Virtual Globe 渲染技术笔记】8 顶点变换精度
  • 提升 LLM 推理效率的秘密武器:LM Cache 架构与实践
  • Node.js导入MongoDB具体操作
  • 埃式筛法欧拉筛法质数分布定理
  • C++核心语言元素与构建块全解析:从语法规范到高效设计
  • EC11编码器
  • 关于原理解析和编程技巧的深度探索!
  • 【计算机网络面试】TCP/IP网络模型有哪几层
  • LaTeX中表示实数集R的方法
  • 19.5 「4步压缩大模型:GPTQ量化实战让OPT-1.3B显存直降75%」
  • 计算机网络 HTTP和HTTPS 区别
  • 字符串的说明以及应用
  • topographic terrain
  • Spring IOC 学习笔记
  • 关于pygsp引发的一系列问题和实例小demo
  • wrap go as a telnet client lib for c to implement a simple telnet client