Java String类面试题

Java面试炼金系列 | 关于String类的常见面试题剖析 0x0 基础知识 1. '==' 运算符 Java中的数据类型分为基本数据类型和引用数据类型: 基本类型:编程语言中内置的最小粒度的数据类型。它包括四大类八种类型 4种整数类型:byte、short、int、long 2种浮点数类型:float、double 1种字符类型:char 1种布尔类型:boolean 引用类型:引用也叫句柄,引用类型,是编程语言中定义的在句柄中存放着实际内容所在地址的地址值的一种数据形式,例如: 类 接口 数组 对于基本类型来说,==比较. 阅读详情

字符串对象是一种特殊的对象.String类是一个不可变的类..也就说,String对象一旦创建就不允许修改

String类有一个对应的String池,也就是 String pool.每一个内容相同的字符串对象都对应于一个pool里的对象.

1. 看下面一段代码.

  String s = new String("abc");
  String s1 = "abc";
  String s2 = new String("abc");


  System.out.println(s == s1);
  System.out.println(s == s2);
  System.out.println(s1 == s2);

请问 前面三条语句分别创建了几个对象,分别是什么.后面的输出分别是什么

(1)String s = new String("abc"); 这句,创建了两个对象..其内容都是"abc".注意,s不是对象,只是引用.只有new生成的才是对象.

创建的流程是,首先括号里的"abc"先到String pool里看有没"abc"这个对象,没有则在pool里创建这个对象..所以这里就在pool创建了一个"abc"对象.然后 通过new语句又创建了一个"abc"对象..而这个对象是放在内存的堆里. .这里的s指向堆里的对象.

(2) String s1 = "abc"; 这条语句,s1当然还是引用.没啥可说的.后面的"abc".其实就是上面括号里的"abc".执行的是相同的操作.即 在pool里查找有没"abc"这个对象.没有则创建一个...很显然,第一条语句在pool里已经创建了一个"abc".所以这条语句没有创建对象,s1指向的是pool中的"abc"

(3)String s2 = new String("abc"); 这条语句,其实和第一条是一样的,但是,因为第一条已经在pool中创建了"abc"这个对象,所以,这条语句创建了一个对象.s2指向的是堆里的"abc".注意,虽然内容都是"abc",s与s2表示的是不同的对象

(4)接下来就很好说了.下面的三个==判断.(注意,==永远是判断内存地址是否相等) s与s1,一个指向堆里的对象,一个指向pool里的.很明显是不同的对象.s与s2.上面说了,虽然都是指向堆里的对象,内容也是"abc",但是也不是相同的对象.s1与s2.一个指向pool,一个指向堆.也不是相同的对象.所以三个都返回false.

2. 第二个问题

  String s = new String("abc");
  String s1 = "abc";
  String s2 = new String("abc");
  
  System.out.println(s == s1.intern());
  System.out.println(s == s2.intern());
  System.out.println(s1 == s2.intern());

求最后输出是什么

解答.最后的答案是 false false true

intern()方法.按照jdk的帮助文档来说,是返回字符串对象的规范化表示形式。通俗一点说,就是返回对应这个字符串内容的那个pool里的对象.这样说也许还看不太明白,那可以拿具体例子来说

s1.intern().他的执行流程是,在pool里去查找s1对应的内容(也就是"abc").如果找到,则返回pool里的对象.如果没有(老实说,我没想到有哪种情况是没有的),则在Pool创建这个对象,并返回...

这样就很容易理解了.s1.intern返回的是pool里的"abc"对象.与s这个堆里的对象肯定不同,返回false.同理,s与s2.intern()也肯定不同,返回false.第三个,s1与s2.intern().其中s2.intern()返回的是pool中的"abc"对象,而s1也是指向pool中的"abc"对象.所以返回的是true:

3. 第三个问题

  String hello = "hello";
  String hel = "hel";
  String lo = "lo";
  
  System.out.println(hello == "hel" + "lo");
  System.out.println(hello == "hel" + lo);

求输出的结果

解答 true false

首先,上面已经说明了,hello hel lo这三个都是指向pool中的对象..

现在我们考虑"hel" + "lo" 按照内容来说,两个相加也就是"hello".这个时候,这个会返回pool中的"hello"对象.所以,hello == "hel" + "lo" 返回的是true .

而"hel" + lo 虽然内容也是"hello",但是它将在堆里面生成一个"hello"对象,并返回这个对象...所以这里的结果是false

总结一下就是,如果加号两边的是字面值(字面值就是直接在""里写的值,比如上面的"hel"与"lo"),那么将在pool里查找有没对应内容的对象(这里的内容就是"hello"),并返回pool里的对象.这和hello是一样的....

如果加号两边不满足上面的条件(比如,两边的值是引用值或者堆里的字符串对象).那么将不会再pool里查找"hello",而是直接在堆里生成一个新的对象...

零基础学习大气污染模式(WRF、WRF-chem、smoke、camx等) 阅读详情

相关推荐

RK3588 MIPI屏幕调试避坑指南:双通道8Lane下DSC压缩屏的花屏、分层问题排查实录

本文详细解析了RK3588平台在双通道8Lane MIPI接口下调试DSC压缩屏时遇到的花屏、分层问题。通过硬件信号完整性检查、软件配置验证及帧数据分析,提供了一套系统化的排查方法,并深入探讨了初始化序列优化和双通道同步机制,帮助工程师高效解决高分辨率屏幕显示异常问题。

weixin_27015733的博客 280

String 类 面试题

字符串对象是一种特殊的对象.String类是一个不可变的类..也就说,String对象一旦创建就不允许修改 String类有一个对应的String池,也就是 String pool.每一个内容相同的字符串对象都对应于一个pool里的对象. 1 看下面一段代码. String s = new String("abc"); String s1 = "abc"; Strin...

zhengzhusheng的博客 326

别再为数据发愁:5分钟理解事件相机原理,并自己动手生成事件图像

本文深入浅出地解析了事件相机的工作原理,并提供了从静态图像生成事件数据的实用方法。通过Python代码示例,读者可以快速掌握如何模拟事件相机的输出,应用于机器人导航、自动驾驶等领域,解决数据获取难题。

weixin_31458015的博客 298

String intern

http://www.kscodes.com/java/string-pool-in-java-string-initialization/String Pool in Java and String Initialization How to Create a StringAs we know that String in java can be created using 2 types.

vurtue的博客 275

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 466

高通平台Camera sensor bring up!

Qualcomm Camera sensor bring up!0. 准确1. Kernel 底层驱动配置1.1 dtsi1.2 pinctrl2. Chi-Cdk XML 配置2.1 sensormodule2.2 sensor3. CHECK 本文主要针对高通平台SM7250进行描述,当然高通平台可能基本都差不多【第一个项目】 —only for sensor probe sucess. 0....

Understand-image 9239

String中常见笔试题

package test.String; public class Test { public static void main(String[] args) { String s1="abc"; String s2="abc"; String s3=new String("abc"); String s4="a"+"b"...

qq_44666176的博客 1080

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

Java面试题--笔试题02----String对象相关面试题

下列哪些生成新的string对象() A. String s= new String(); B. String s = new String("A"); C. String s=""; D. String s = "A".intern(); E. String s = (String)String. class . newInstance(); 答案:A,B,C,D,E 知识点: Java String 最常见的两种创建方式: 1.常量式创建:String str = "abc"; JV

Merlin12345789的博客 631

【宝藏级】全网最全的Pandas详细教程(2万字总结)

【回炉重造】Python之Pandas详细教程前言为什么要学习pandas?什么是Pandas?官网1. Pandas的索引操作索引对象Index {#索引对象index}1. Series和DataFrame中的索引都是Index对象2. 索引对象不可变,保证了数据的安全常见的Index种类Series索引 {#series索引}1. index 指定行索引名2. 行索引3. 切片索引4. 不连续索引5. 布尔索引DataFrame索引1. columns 指定列索引名2. 列索引3. 不连续索引高级索引

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 6万+

OpenHarmony WebView引擎:从Chromium魔改到分布式渲染的终极解析

ArkWeb框架提供了强大的Web应用开发能力,但同时也需要注意网络安全问题,尤其是跨域请求方面。

m0_67505153的博客 1194

涉及String类笔试题练习

Java面试笔试题中String类常见的题目: 1、自己设计一个trim()方法: public String myTrim(String string) { int start = 0; int end = string.length() - 1; while (start < end && string.charAt(start) == '

大白程序猿 779

标准论文参考文献添加方法——Zotero入门使用教程

第一篇论文投出去了,写一下最后一步的参考文献修饰润色吧! 论文的参考文献,即References,是论文的最后一步,相信不管是写毕设论文还是期刊论文都遇到过需要修改参考文献的情况,非常之麻烦。而且参考文献中经常会与生僻奇怪气体出现,一个一个修改非常浪费时间,这里介绍一下一个非常好用的软件Zetero。 第一步:软件的下载安装及绑定Word 尽量使用客户端吧,

MISAYAONE的博客 20万+

java中String类的笔试面试题含答案

1.下面程序的运行结果是()(选择一项) String str1="hello"; String str2=new String("hello"); System.out.println(str1==str2); A. true B. false C. hello D. he 答案:B 分析:str1没有使用new关键字,在堆中没有开辟空间,其值”hello”在常量池中,str2使用new关键字创...

段远山 2928

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于Java String类的5道面试题

这篇来看看关于 Java String 类的 5 道面试题,本篇就带你了解这些题的答案为什么是这样。1.判定定义为String类型的st1和st2是否相等,为什么packagestr...

xcbeyond|疯狂源自梦想,技术成就辉煌 391

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【java】String类常见面试题

【java】String类常见面试题

HanJuly9569的博客 278

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java中String类的常考面试题汇总

Java中String类的常考面试题汇总 前言 由于在学习中需要不断完善自身,在网络上搜寻了几道关于java中String类的面试题,汇总为一篇博客,以便在将来有需要时,能够找到复习的地方 主题 第一题 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // true System.out.println(s1.equals(s2));// true ...

LANMAO112的博客 448

Java题集 - String类常见面试题总结

首先需要先理解这两个知识点:(1) 字符串常量池中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的。(2) 使用final修饰的引用类型变量不能被重新赋值,但可以改变引用类型变量所引用对象的内容。String类是不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁,每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。} }

你今天真好看呀 1297

Java字符串篇-3-String类5个常见面试题的解答过程和原理

a”,”b”,”c”三个本来就是字符串常量,进行+符号拼接之后变成了“abc”,“abc”本身就是字符串常量(Java中有常量优化机制),所以常量池立马会创建一个“abc”的字符串常量对象,在进行st2=”abc”,这个时候,常量池存在“abc”,所以不再创建。上面的答案第一个是false,第二个是true,第二个是true我们很好理解,因为比较一个是“abc”,另外一个是拼接得到的“abc”,所以equals比较,这个是输出true,我们很好理解。换句话说,新创建的字符串是该参数字符串的副本。

web15085096641的博客 789

Java 的String类的详解以及各个常用方法的解释和演示以及常考的面试题

String 类 String类的概述 1.字符串字面值"abc"也可以看成是一个字符串对象 2.字符串是常量,一旦被赋值,就不能被改变 常见的构造方法 public String():空构造 public String(byte [] bytes):把字节数组转成字符串 public String(byte [] bytes,int index,int length):把字节数组的一部分转成字...

qq_38118222的博客 515

string s=new string() 创建了几个对象_Java的String类5个常见面试题的解答过程和原理...

这篇来看看关于Java String类的5道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,学完了这篇,我才焕然大悟,才知道为什么是这个答案,本篇就带你了解这些题的答案为什么是这样。1.判定定义为String类型的st1和st2是否相等,为什么package string;public class Demo2_String {public static void main(St...

weixin_40007668的博客 917

Java基础-String类API简要概述以及面试题

String类是一个很重要类,因为你与String打交道的次数真的是太多了,若是真的严格要求自己,可以说String类中的每个方法你都需使用的如会背一般的熟练,当然我们也不需要去死记硬背,熟能生巧嘛,多接触接触代码自然就会了。 String类的概述 1:字符串字面值"abc"也可以看成是一个字符串对象。 2:字符串是常量,一旦被赋值,就不能被改变。 String类的构造方法

小喇叭儿滴滴的吹 1012

Java面试题:String类的concat方法

 编译并运行下面的程序,其结果是什么?  public class MyClass {  public static void main(String[] args) {  String str1 = "str1";  String str2 = "str2";  String str3 = "str3";  str1.concat(str2);  System.out.println(s

跟我学Java26日通 1555

Java基础面试题: 面向对象(String类、常量池、线程安全、包装类)

收集大量Java经典面试题目,内容涵盖了包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 等知识点。适合准备Java面试的读者参考和复习。

m0_46013789的博客 1344

java string类面试_Java中String类常见的面试题

String类的常见面试题1.判断定义为String类型的s1和s2是否相等String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2);System.out.println(s1.equals(s2));2.下面这句话在内存中创建了几个对象?String s1 = new String("abc");3.判断定义为String类...

weixin_35836501的博客 337

java中string类面试题_java中String类的面试题大全含答案

1.下面程序的运行结果是()(选择一项)String str1="hello";String str2=new String("hello");System.out.println(str1==str2);A. trueB. falseC. helloD. he答案:B分析:str1没有使用new关键字,在堆中没有开辟空间,其值”hello”在常量池中,str2使用new关键字创建了一个对象,在堆...

weixin_39915700的博客 447
上一篇: Java NIO概述
下一篇: Java关键字final、static使用总结
andybbc
博客等级 码龄11年 64粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值