第一题:打印的结果是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常见面试题的更多相关文章

  1. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...

  2. Java String常见面试题汇总

    String类型的面试题   1.       String是最基本的数据类型吗? 基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个. ...

  3. 【转载】常见面试题:C#中String和string的区别分析

    在很多人面试C#开发工程师的时候,会遇到一个面试题,就是C#中String和string有啥区别.其实针对这个问题C#中String和string没有本质上的区别,两者在程序中都可使用,稍微的一个区别 ...

  4. Java面试炼金系列 (1) | 关于String类的常见面试题剖析

    Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...

  5. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  6. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  7. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  8. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  9. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  10. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

随机推荐

  1. Spring基础 02 | JdbcTemplate

    JdbcTemplate Spring对Jdbc的Api简单封装 开发步骤 1.导入Spring-jdbc.spring-tx坐标 2.创建数据库表和实例 3.创建jdbcTemplate对象 4.执 ...

  2. [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(00):iced简单窗口的实现以及在窗口显示中文

    前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发. iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动. 本合集是基于新版本的关于分 ...

  3. 如何快速在本地运行你vue打包的的dist文件

    要在本机启动运行前端提供的dist包,需要先安装一个HTTP服务器,例如Apache,Nginx,phpstudy.这里以使用Node.js的http-server为例进行说明 首先,确保已经安装了N ...

  4. 「V 曲闲谈」《宠儿》——谁凌迟着梦想家

      反正个人博客啥都能写是吧.(   严格来说,这并不是对歌曲或者 PV 的解析,仅仅是记录这首歌带给我的一些感触.   参考:狐狸座 ver & 艾尔法 ver.   按照简介,歌曲的内容似 ...

  5. ClickHouse-2接口

    客户端 ClickHouse提供了两个网络接口(两个都可以选择包装在TLS中以增加安全性): HTTP, 包含文档,易于使用. Native TCP,简单,方便使用. 在大多数情况下,建议使用适当的工 ...

  6. C# 开发工具Visual Studio 介绍

    Visual Studio Community (社区版) 这个版本的 Visual Studio 是免费的,具备以前 Professional 版的功能.使用时间有许可限制.它对开源项目和培训.学术 ...

  7. dart 中在实例化 new 关键字可以省略不写

    dart 中在实例化 new 关键字可以省略不写 class Person { String name; int age; String sex; Person(this.name, this.age ...

  8. react之state两种不同的写法

    我发现 state 有两种不同的写法 在构造器 constructor 中是这样的 有 this. constructor(props){//参数必须要有 super(props); this.sta ...

  9. QR防伪溯源系统追溯原理是什么?

    本文分享自天翼云开发者社区<QR防伪溯源系统追溯原理是什么?>,作者:SD万 QR防伪溯源系统是一种基于QR技术的防伪技术,通过为每件产品生成唯一的QR标签,并将其与产品信息.生产信息.物 ...

  10. yum repo和rpm,添加阿里repos

    RPMRPM(Red-hat Package Manager),是一个由红帽最早开发出来的包管理器,目前已经是大多数Linux发行的默认包管理器.RPM管理的包都是以.rpm结尾,其中存储了该软件的安 ...