String常见面试题
第一题:打印的结果是true还是false呢?
在之前我们就说过这题,执行s1时,检查字符串常量池,发现没有“abc”,于是创建“abc”,执行s2时,接着检查常量池,发现有“abc”,直接复用,所以s1和s2地址一致,打印出来是true
第二题:true or false
1.主方法自动进栈,执行s1,双引号“abc”,检查常量池发现没有,创建“abc”
2.执行s2,有new进堆,在堆内存中创建空间,检查常量池,发现有“abc”,所以直接将“abc”复制一份存入空间中
提问:“abc”复制的是内容还是地址呢?
答:我们需要知道,“abc”是一个对象,而它的本质其实是一个byte类型的数组所记录的值
该数组会记录每一个字节所对应的数字,a——>97 ...... 所以abc也就是97 98 99 因此,复制“abc”给堆内存的空间是将value这个数组的地址赋给空间,所以,复制的是地址。
3.空间收到abc后,s2记录地址
所以,s1与s2的地址不同,打印出来的结果是false
完整流程:https://kdocs.cn/l/cnfY68qsWVNS?linkname=150996520
.
第三题
1.主方法进栈,执行s1,检查常量池发现没有“abc”,创建对象
2.执行s2,常量池没有“ab”,创建对象
3.执行s3,先检查常量池是否有“c”,发现没有,创建“c”
4.发现有“+”即字符串拼接符,这时系统会自动产生一个新的类叫做StringBuilder
5.StringBuilder会自动将s2与“c”拼接成abc
6.拼接完之后还不能直接将地址给s3,因为s3是String类与StringBuilder类不一致,因此StringBulider还会使用一个toString方法,将其转换为String类
所以,s1与s3的地址不同,打印结果是false
完整流程:https://kdocs.cn/l/cnfY68qsWVNS?linkname=150996521
第四题
这题打印的结果是true
疑惑:为什么结果是true?上题才说完字符串拼接符,StringBuilder什么的,这题怎么就又是true了?
答:因为存在java常量优化机制,刚才是变量和“c”相加,而这题是三个常量相加,java会自动拼接在一起,所以这题本质长这样
这不就和第一题长一样吗,所以是true
String常见面试题的更多相关文章
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- Java String常见面试题汇总
String类型的面试题 1. String是最基本的数据类型吗? 基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个. ...
- 【转载】常见面试题:C#中String和string的区别分析
在很多人面试C#开发工程师的时候,会遇到一个面试题,就是C#中String和string有啥区别.其实针对这个问题C#中String和string没有本质上的区别,两者在程序中都可使用,稍微的一个区别 ...
- Java面试炼金系列 (1) | 关于String类的常见面试题剖析
Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- JDBC常见面试题
以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...
- Mybatis常见面试题
Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...
- JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- 整理的最全 python常见面试题(基本必考)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- PHP常见面试题汇总(二)
PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...
随机推荐
- cpa-审计
1.审计概述 2.审计计划 3.审计证据 4.审计抽样方法 5.信息技术对审计的影响 6.审计工作底稿 7.风险评估 8.风险应对 9.销售与收款循环的审计 10.采购与付款循环的审计 11.生产与存 ...
- 【python】如何优雅的终止while循环
1. 背景需求 python需要与外界或终端交互时,常常需要使用while循环一直跑. 如果需要终止程序,一般使用Ctrl+c,此时终端会打印一大堆backtrace,并且无法保留当前运行的状态,非常 ...
- MySQL插入修改和删除
原文链接:https://blog.liuzijian.com/post/36d9bcaa-2ba7-26ca-6f97-b8ef7a058e95.html 插入 支持一次性插入多行,支持子查询 IN ...
- 1.某道翻译js逆向sign值
首先找到这个请求接口 这个接口就是我们请求翻译的接口 发现有个sign值,这就是我们需要逆向的值 再看看这个接口的响应 可以发现这个响应是被加密的,我们还需要去逆向解密这个被加密的响应,这篇就单纯讲一 ...
- 移动端如何自动适配px
<script type="text/javascript"> (function(doc, win) { var docEl = doc.documentElemen ...
- react之state两种不同的写法
我发现 state 有两种不同的写法 在构造器 constructor 中是这样的 有 this. constructor(props){//参数必须要有 super(props); this.sta ...
- GIS数据合集:作物、植被数据下载平台整理
本文对目前主要的作物类型与产量.植被物候与指数数据产品的获取网站加以整理与介绍. 目录 4 植被农业数据 4.1 作物产量数据 4.1.1 SPAM 4.1.2 Aerial Intelligen ...
- DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
前言 最近 DeepSeek 狠狠刷了一波屏,国产大模型真的越来越厉害了,官方的服务器已经爆满了,以至于频繁出现反应迟缓甚至宕机的情况,和两年多之前 ChatGPT 的遭遇颇为相似. 我已经好久没有本 ...
- 爬虫无限Debugger解决方案
爬虫无限Debugger解决方案 在应对网站中的debugger语句以防止爬虫被调试时,一些网站会在代码中插入这些断点以干扰调试行为. 一种极端但直接的方法是通过禁用浏览器的断点激活功能来绕过所有de ...
- Flink CDC全量和增量同步数据如何保证数据的一致性
Apache Flink 的 Change Data Capture (CDC) 功能主要用于实时捕获数据库中的变更记录,并将其转换为事件流以供下游处理.为了保证全量和增量数据同步时数据的一致性.不丢 ...