java面试强基(9)

news2025/1/13 10:00:47

 

字符串拼接用“+” 还是 StringBuilder?

Java 语言本身并不支持运算符重载,“+”和“+=”是专门为 String 类重载过的运算符,也是 Java 中仅有的两个重载过的运算符。

​ 字符串对象通过“+”的字符串拼接方式,实际上是通过 StringBuilder 调用 append() 方法实现的,拼接完成之后调用 toString() 得到一个 String 对象 。

String#equals() 和 Object#equals() 有何区别? 

​ String 中的 equals 方法是被重写过的,比较的是 String 字符串的值是否相等。 Object 的 equals 方法是比较的对象的内存地址。

字符串常量池的作用了解吗? 

​ 字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。

String s1 = new String("abc");这句话创建了几个字符串对象? 

会创建 1 或 2 个字符串对象。

​ 1、如果字符串常量池中不存在字符串对象“abc”的引用,那么会在堆中创建 2 个字符串对象“abc”。

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

 

intern 方法有什么作用? 

​ String.intern() 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况:

  • 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用。
  • 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。

尽管在输出中调用intern方法并没有什么效果,但是实际上后台这个方法会做一系列的动作和操作。在调用”ab”.intern()方法的时候会返回”ab”,但是这个方法会首先检查字符串池中是否有”ab”这个字符串,如果存在则返回这个字符串的引用,否则就将这个字符串添加到字符串池中,然会返回这个字符串的引用。

String str1 = "a";
String str2 = "b";
String str3 = "ab";
String str4 = str1 + str2;
String str5 = new String("ab");
 
System.out.println(str5.equals(str3));
System.out.println(str5 == str3);
System.out.println(str5.intern() == str3);
System.out.println(str5.intern() == str4);

 

为什么会得到这样的一个结果呢?我们一步一步的分析。

  •  第一、str5.equals(str3)这个结果为true,不用太多的解释,因为字符串的值的内容相同。
  •  第二、str5 == str3对比的是引用的地址是否相同,由于str5采用new String方式定义的,所以地址引用一定不相等。所以结果为false。
  •  第三、当str5调用intern的时候,会检查字符串池中是否含有该字符串。由于之前定义的str3已经进入字符串池中,所以会得到相同的引用。
  •  第四,当str4 = str1 + str2后,str4的值也为”ab”,但是为什么这个结果会是false呢?先看下面代码:
String a = new String("ab");
String b = new String("ab");
String c = "ab";
String d = "a" + "b";
String e = "b";
String f = "a" + e;

System.out.println(b.intern() == a);
System.out.println(b.intern() == c);
System.out.println(b.intern() == d);
System.out.println(b.intern() == f);
System.out.println(b.intern() == a.intern());

 

由运行结果可以看出来,b.intern() == a和b.intern() == c可知,采用new 创建的字符串对象不进入字符串池,并且通过b.intern() == d和b.intern() == f可知,字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量(如f中的e)则不会进入字符串池中。但是字符串一旦进入字符串池中,就会先查找池中有无此对象。如果有此对象,则让对象引用指向此对象如果无此对象,则先创建此对象,再让对象引用指向此对象。 

当研究到这个地方的时候,突然想起来经常遇到的一个比较经典的Java问题,就是对比equal和==的区别,当时记得老师只是说“==”判断的是“地址”,但是并没说清楚什么时候会有地址相等的情况。现在看来,在定义变量的时候赋值,如果赋值的是静态的字符串,就会执行进入字符串池的操作,如果池中含有该字符串,则返回引用。 

 

String a = "abc";
String b = "abc";
String c = "a" + "b" + "c";
String d = "a" + "bc";
String e = "ab" + "c";
        
System.out.println(a == b);
System.out.println(a == c);
System.out.println(a == d);
System.out.println(a == e);
System.out.println(c == d);
System.out.println(c == e);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MFC】一个最简单的MFC程序(9)

了解完MFC程序的流程后,会有 “果然不需要了解这些东西,直接用就可以了” 的感觉。这应该是MFC的初衷吧——按照框架来,集中精力做应用。但是没有了解呢? 最简单的MFC程序 步骤: 1、创建WIN32应用程序,空…

GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码)

1、什么是 MVC M 即 Model 模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个…

1531_AURIX_TriCore内核架构_任务以及函数

全部学习汇总: GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 继续前面的内核架构学习,这次看一下任务以及函数的描述。 1. 在嵌入式系统中,内核以及函数的设计其实是有一定的模型或者说是…

day33 文件上传中间件解析漏洞编辑器安全

前言 先判断中间件,是否有解析漏洞,字典扫描拿到上传点,或者会员中心,有可能存在文件上传的地方,而后测试绕过/验证,根据实际情况判断是白名单、黑名单还是内容其他的绕过,绕过/验证和中间件的…

数字信号处理FFT快速傅立叶变换MATLAB实现——实例

今天做作业的时候发现要对一个信号进行FFT变换,在网上找了半天也没找到个能看懂的(因为我太菜了),后来自己研究了一下,感觉一知半解的 起因是这道作业题 例题-满足奈奎斯特 我画了两个图,一个是原信号经过…

毕业论文管理系统的设计与实现

摘要 随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流、相互通信、共享信息、文件的上传下载等。在线毕业论文管理系统就是以上运用之一,它已经广泛的应用于目前的各大高校,但现有的这些系统都有一定的局…

如何在VScode和Jetbrain上使用备受争议的GitHub Copilot

如何在VScode和Jetbrain上使用备受争议的GitHub Copilot VSCDOE https://docs.github.com/en/copilot/quickstart 配置好之后,就是这种效果,真实太NB了!!! 一个tab就把所有的代码都填充上去了! Jetbrain…

MES系统以全流程优化为核心,实现全闭环的生产

MES系统是一个在车间中广泛使用的软件,它具有承上启下的功能.该系统采用企业ERP系统,获取计划、资源等数据,并与PLM、SRM、WMS等进行整合,获取BOM、流程等数据。该系统可对下级的控制系统进行操作,并将作业命令和恢复计…

Prometheus Operator 极简配置方式在k8s一条龙安装Prometheus 监控

在k8s上 Prometheus(普罗米修斯) 监控,需要部署各种组件,比如Prometheus、Alertmanager、Grafana。同时各个组件的配置文件也是需要到处各个配置,Prometheus配置监控服务时,你还要知道各个监控服务的地址&a…

JDBC编程

JDBC编程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QlM7GTR-1669108965995)(https://img1.baidu.com/it/u865461056,274570923&fm253&fmtauto&app138&fPNG?w794&h500)] 什么是JDBC Java数据库连接 Java Database Connect…

第2-4-2章 规则引擎Drools入门案例-业务规则管理系统-组件化-中台

文章目录3. Drools入门案例3.1 业务场景说明3.2 开发实现3.3 小结3.3.1 规则引擎构成3.3.2 相关概念说明3.3.3 规则引擎执行过程3.3.4 KIE介绍3. Drools入门案例 全套代码及资料全部完整提供,点此处下载 本小节通过一个Drools入门案例来让大家初步了解Drools的使用…

Java 集合学习笔记:HashMap

Java 集合学习笔记&#xff1a;HashMapUML简介阅读源码属性字段1. 静态属性2.成员属性静态内部类class Node<K,V>静态工具方法hash(Object key)comparableClassFor(Object x)compareComparables(Class<?> kc, Object k, Object x)tableSizeFor(int cap)构造方法Ha…

电梯物联网网关软硬件一体化解决方案

电梯物联网监测平台&#xff0c;基于边缘计算智能监测设备全天候、全自动监测电梯的运行。通过采集电梯实时运行传感数据&#xff0c;建立运行状态关键数据标准&#xff0c;基于AI机器学习算法&#xff0c;采用大数据分析计算&#xff0c;对电梯故障、困人等事件实时报警&#…

solr自定义定制自带core添加分词器,解决镜像没有权限问题

因为solr要安装自定义的分词器 就打算在原有基础上提前放好,直接启动就有core 第一步获取默认配置 方法一 docker安装solr 这个帖子中 1、安装镜像 docker pull solr:8.11.1 2、新建目录 mkdir -p /home/apps/solr 3、复制配置文件 运行一个临时solr docker run --name solr…

14.HTML和CSS 02

文章目录一、HTML标签&#xff1a;表单标签1、概念2、form标签3、表单项标签4、案例二、CSS&#xff1a;页面美化和布局控制1、概念2、好处3、CSS的使用&#xff1a;CSS与html结合方式4、css语法5、选择器6、属性案例一、HTML标签&#xff1a;表单标签 1、概念 表单标签是用于…

integral函数Opencv源码理解-leetcode动态规划的使用场景

前言 Opencv有一个integral()函数&#xff0c;也就是积分图算法。有三种积分图类型&#xff0c;求和&#xff08;sum&#xff09;&#xff0c;求平方和(sqsum)&#xff0c;求旋转45和(titled)。根据名字可知道&#xff0c;前两个是统计输出每个坐标的左上方像素和、左上方像素平…

pexpect 自动交互输入

pexpect 为 python 内置库&#xff0c;在 linux 上执行的&#xff0c;win 执行会报错 主要用于执行命令后自动输入&#xff0c;例如要执行 sql 去修改全局变量&#xff1a; mysql -uroot -p -h127.0.0.1 -e"set gloabl max_prepared_stmt_count1000000;" 这时候会…

实时数据平台设计

1 相关概念背景 1.1 从现代数仓架构角度看实时数据平台 现代数仓由传统数仓发展而来&#xff0c;对比传统数仓&#xff0c;现代数仓既有与其相同之处&#xff0c;也有诸多发展点。首先我们看一下传统数仓&#xff08;图1&#xff09;和现代数仓&#xff08;图2&#xff09;的…

基于springboot和vue的IT内部电脑报修服务系统设计与实现-计算机毕业设计源码+LW文档

it内部设备服务系统设计与实现 摘 要 it内部设备服务系统将传统的网络服务方式与最新的互联网技术相结合&#xff0c;使用方便快捷&#xff0c;有利于设备维修部门规范管理&#xff0c;提高网络维修部门的工作效率&#xff0c;在技术、态度等多方面提高维修部门服务质量。因此…

Oracle表空间、用户详解

目录新建连接三者关系表空间创建表空间修改表空间和数据文件修改数据文件容量新增表空间的数据文件重命名数据文件修改表空间状态修改数据文件状态删除表空间查询用户创建删除查询修改新建连接 工具选择&#xff1a; 我们一般会选择一个工具来连接本地的Oracle&#xff0c;而我…