Java面试题-Java核心基础-第七天(String)

目录

一、String、StringBuffer、StringBuilder的区别

二、String为什么是不可变的

三、字符串拼接用"+"还是用StringBuilder

四、String 中的equals和Object中的equals的区别

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

六、String s1 = new String("abc")是创建了几个对象?

七、String中的intern方法有什么作用

八、String类型的变量和常量做"+"时发生了什么?


一、String、StringBuffer、StringBuilder的区别

1. 是否可变

String由于属性被private 而且还被final修饰 而且String类还是final的  所以子类也无法进行修改 外界无法进行干扰,可以理解为常量  自然就不可变了

而StringBuffer和StringBuilder都实现了StringBuilderAbstract类 这个抽象类中定义了许多方法  例如:append   replace 等方法 是可变的

2. 线程是否安全

String中的属性可以理解为常量,自然是线程安全的

StringBuffer中的方法获取调用的方法都加了同步锁,因此是线程安全的

StringBulider中都没有加同步锁,自然线程不安全

3. 性能

String每次对其修改都需要重新创建一个新的对象,因此对内存的消耗也比较大,性能不是很高

StringBuffer和StringBuilder因为都是可变的,效率较高,而StringBuilder因为方法都没有加锁,因此性能更高

总结三者的使用:

1. 如果是少量的操作,可以使用String

2. 如果是处于单线程环境,并且有大量的字符串操作,可以使用StringBuilder

3. 如果是多线程环境,大量的字符串操作,使用StringBuffer

二、String为什么是不可变的

因为字符数组(后面是字节数组)被private修饰 也被final修饰 并且没有对外提供修改方法,因此无法直接操作

并且String类还是被final修饰的,所以也不能被子类所修改

三、字符串拼接用"+"还是用StringBuilder

使用+其实底层就是使用的StringBuilder的append方法

对于大量的拼接操作,推荐使用StringBuilder(当然这个在jdk9中得到了优化,也可以使用+),因为这只是一个StringBuilder对象在使用,而如果在循环中连续的对一个字符串使用+操作的话,就会创建多个StiringBuilder对象,不能进行复用,因此效率较低。

四、String 中的equals和Object中的equals的区别

String中的equals方法是得到了重写的,是比较的字符串的内容,而非Object中直接比较地址

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

字符串常量池相当于就是缓存,是为了减少资源消耗的,避免重复的创建字符串对象

字符串常量池是存在于方法区中,一旦有一个String s = "abc"或者是Stirng s = new Sting("abc")

那么就会在字符串常量池中保留abc这个字面量   当下次再去 String s2 = "abc"时,此时无需再创建对象,直接使用字符串常量池中的即可,对于Stirng s4 = new Sting("abc")也一样,此时就只需要创建堆中的字符串对象,里面的char[]数组其实还是直接使用的字符串常量池中的字符串引用、

所以此时就只需要创建一个对象即可

六、String s1 = new String("abc")是创建了几个对象?

当字符串常量池中已存在abc字符串那么就只创建一个对象  否则需要不仅要创建堆上的字符串对象  还要创建字符串常量池中的(其实是创建那个char[]的,只是后面把这个引用放到字符串常量池中)

例如:

String s = "abc";/String s = new Stirng("abc")这个也会放到字符串常量池中

String s1 = new String("abc")

此时创建一个对象

七、String中的intern方法有什么作用

就是手动的将字符串引用放到字符串常量池中

如果字符串常量池中已经存在了引用,那么就直接返回这个引用 否则创建一个引用再返回

当然当创建String对象的时候,实际上就已经自动的将其引用放到字符串常量池中去了

八、String类型的变量和常量做"+"时发生了什么?

如果是常量 + 常量的方式  再编译的时候,编译器就会进行 一种叫做“常量折叠”的优化

例如 "abc" + "fg" 编译器就会直接将其优化成"abcfg" 不仅字符串这样 像其他的int long byte char等也会存在此优化  

对于常量可以这样优化,但是一旦有变量,也就是对象引用 那么在编译的时候是无法对其进行优化的  因此只能创建一个新的创建 在堆上

String s1 = "abc" String s2 = "df"

s1 + s1 其实是 new StringBuilder().append(s1).append(s2).toString()

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

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

相关文章

数据挖掘(6)聚类分析

一、什么是聚类分析 1.1概述 无指导的,数据集中类别未知类的特征: 类不是事先给定的,而是根据数据的相似性、距离划分的聚类的数目和结构都没有事先假定。挖掘有价值的客户: 找到客户的黄金客户ATM的安装位置 1.2区别 二、距离和相似系数 …

状态空间方程的离散化

一、理论基础 1、系统离散化(传递函数和状态空间方程) 【离散系统】传递函数和状态空间方程离散化-CSDN博客 状态空间方程的离散化 - 知乎 (zhihu.com) 2、差分方程的建立与分析 【精选】数学建模之差分方程模型详解_左手の明天的博客-CSDN博客 【信…

UITesting 界面测试

1. 创建界面测试视图 UITestingBootcampView.swift import SwiftUI/// 界面测试 ViewModel class UITestingBootcampViewModel: ObservableObject{let placeholderText: String "Add name here..."Published var textFiledText: String ""Published var…

2023年中国一次性医用内窥镜市场发展现状分析:相关产品进入上市高峰期[图]

基于对减少交叉感染风险和维护成本的需求等因素,一种新兴的、耗材化的一次性内窥镜可以避免因重复使用产品而导致的感染问题和高额的清洗消毒费用,从而提高患者的安全性并帮助医疗机构节省运营成本。 一次性和可重复使用医用内窥镜特点对比 资料来源&am…

Android 指定有线网或Wifi进行网络请求

Android 指定有线网或Wifi进行网络请求 文章目录 Android 指定有线网或Wifi进行网络请求一、前言:二、指定网络通讯测试1、 窗口命令 ping -I 网络节点 IP2、Java 代码指定特定网络通讯 三、指定特定网络的demo app 开发1、效果图:2、实际测试结果说明&a…

记录nfc.listenNFCStatus多次刷卡后会重复调用接口

当你使用nfc.listenNFCStatus在UniApp中监听NFC(Near Field Communication)状态时,可能会出现多次刷卡后接口被重复调用的情况。这通常发生是因为在多次刷卡后,NFC状态变化多次触发了监听事件。要解决这个问题,你可以使…

Nginx负载均衡反向代理动静分离

文章目录 nginx负载均衡&反向代理&动静分离环境说明部署动静分离1.主机lnmp部署一个动态页面,在此以discuz论坛系统为例2.主机n1部署两个静态页面访问动、静态页面 配置负载均衡配置反向代理访问测试 nginx负载均衡&反向代理&动静分离 环境 主机名…

链块串的实现(无功能函数实现)

String.h #pragma once #include <stdlib.h> #include <assert.h> #include <string.h> #include <errno.h> #include <iostream> using namespace std; #define SIZE 5 #define EFF_SIZE (SIZE -1)//插入的有效字符 typedef char elemType;typ…

【LINUX】1-移植NXP提供的源码

一、在Linux中添加自己的开发板 defconfig配置文件&#xff1a;一个就是imx6ull_alientek_emmc_defconfig默认配置文件 # 复制一份NXP 官方的SDK cd arch/arm/configs cp imx_v7_mfg_defconfig imx_alientek_emmc_defconfig 设备树&#xff1a;imx6ull-alientek-emmc.d…

【Arduino32】PWM控制直流电机速度

硬件准备 震动传感器&#xff1a;1个 红黄绿LED灯&#xff1a;各一个 旋钮电位器&#xff1a;1个 直流电机&#xff1a;1个 1K电阻&#xff1a;1个 220欧电阻&#xff1a;3个 杜邦线&#xff1a;若干 硬件连线 软件程序 const int analogInPin A0;//PWM输入引脚 const…

C/C++基础

C 二进制 问题&#xff1a;二进制怎么表示整数、小数、正数、负数&#xff0c;如何存储&#xff1f;加减乘除怎么运算&#xff08;见文章《计算机加减乘除本质》&#xff09;&#xff1f; 变量 c定义一个变量的时候&#xff0c;需要事先定义变量大小和变量类型。 //有符号…

vue通知(滚动)

1. li宽度不顾定 <template><div id"app"><div id"box" mouseover"clearLeft" mouseleave"setLeft"><ul :style"{ transform: translateX( left px) }" ref"cmdlist"><li v-for&qu…

前后端小项目链接

1.vue的创建 vue的项目创建 1.1 vue create vue_name 1.2 Babel Router(路由) CSS Pre-processors 路由可通过&#xff1a;npm i vue-router3.5.2 -S 下载 1.3less 1.4 In dedicated config files 1.5 启动命令&#xff1a;npm run serve 端口号在vue.config。js中配置 devS…

454. 四数相加 II

题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;nums…

SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 Windows 下使用初步

前言 在微服务中&#xff0c;随着服务越来越多&#xff0c;对调用链的分析越来越复杂。如何能够分析调用链&#xff0c;定位微服务中的调用瓶颈&#xff0c;并对其进行解决。 本篇博客介绍springCloud中用到的链路追踪的组件&#xff0c;Spring Cloud Sleuth和Zipkin&#xf…

使用 PyAudio、语音识别、pyttsx3 和 SerpApi 构建简单的基于 CLI 的语音助手

德米特里祖布☀️ 一、介绍 正如您从标题中看到的&#xff0c;这是一个演示项目&#xff0c;显示了一个非常基本的语音助手脚本&#xff0c;可以根据 Google 搜索结果在终端中回答您的问题。 您可以在 GitHub 存储库中找到完整代码&#xff1a;dimitryzub/serpapi-demo-project…

Git的安装

前置 知道自己电脑上跑的是什么系统 查看电脑位数 省事的一种办法 Windows 在cmd中输入如下命令 wmic os get osarchitecture看命令结果即可 省事的一种办法 Linux 直接在终端中输入如下命令 uname -m若结果是x86_64就是64位的&#xff0c;反之32位 图形化的办法 Wind…

在Mac上安装和配置Node.js

在Mac上安装和配置Node.js是一项相对简单但重要的任务。Node.js是一个开源的、跨平台的JavaScript运行时环境&#xff0c;用于构建高效、可扩展的网络应用程序。下面将详细介绍如何在Mac上安装和配置Node.js。 准备工作 在安装配置Node.js之前&#xff0c;你需要确保你的Mac已…

开箱即用的Appimage是什么以及如何建立快捷方式

1 引言 在使用Linux系统过程中&#xff0c;初学者会遇到无穷多的问题&#xff0c;包括软件的安装问题。 ubuntu的deb,centos的rpm, 当然以及需要解压的tar.gz等等。有一种开箱即用的软件安装类型&#xff0c;格式为Appimage。 AppImage 的官方网站是 AppImage | Linux apps tha…

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…