面试字节我被String类的问题给问死了!

在这里插入图片描述
“+” 是怎么连接字符串的?(JDK1.7及以上)

总结:

使用 “+” 连接字符串时,实际上是使用临时创建的StringBuilder对象来辅助完成的。
对于编译时常量,在编译后直接计算出字符串的值,而不会在运行时创建临时的StringBuilder对象来完成字符串连接。
在循环中对String对象进行连接,应该直接使用StringBuilder代替 “+”,这样可以提高性能。
注意: 当使用运算符 “+” 连接字符串时,如果两个操作数都是编译时常量,则在编译时期就会计算该字符串的值,而不会在运行时创建StringBuilder对象。


final String s = "abc";
String x = "abc" + "def"; // 两个操作数都是常量,运行时不会创建StringBuilder对象
String y = s + "def"; // s和"def"都是编译时常量,不会创建StringBuilder对象,实际上x和y指向同一个对象,即"abcdef"
String z = y + "abc"; // y是变量,则在运行时会创建StringBuilder对象

在这里插入图片描述

不可修改的String对象

<1> 问:String对象一经创建,不能修改,为什么?

因为String类是final类型的,无法继承该类。

其所有的成员变量都是private的,并且没有提供修改私有成员变量的公有(public)方法
对String对象的操作都没有修改当前对象,而是新创建一个对象

<2> 问:把String对象设计成不可修改有什么好处吗?

最大好处就是可以实现资源共享,多线程操作时,具有线程安全性。

总结三点:

  • String类是final类型的,其对象一旦创建,不可修改。
  • String类那些看似修改字符序列的方法实际上都是返回新创建的String对象,而不是修改自身对象。
  • String对象不可改变,因此具有线程安全性,可自由实现共享。

String类的内部实现
在String类内部,使用一个字符数组char[]来维护字符序列。

private final char value[];

问:String的最大长度是多少?

String的最大长度也就是字符数组char[]的最大长度,理论上为int类型的最大值,即2147483647,实际上,一般可获取的最大值小于理论最大值。

申请一个int最大值长度字符数组:

char c = new char[Integer.MAX_VALUE]; // 报错

报错:一个char类型占用2字节,Integer.MAX_VALUE个char类型接近于4GB大小,申请这么大一块连续内存空间,导致内存溢出。
//加入Java开发交流君样:756584822一起吹水聊天

分析:Java中的对象是分配在堆上的,默认的堆空间的最大值是256MB,在理想的情况下,只要我们将最大Java堆设置的足够大,就可以申请到最大的字符长度,即Integer.MAX_VALUE。

java -Xmx1G com.fan.fragmentlearning.str.StringDemoMain – 设置Main方法最大Java堆

String常量池

<1> 什么是String常量池?

String常量池是String类内部私有的,能够自动将String字面常量加入其中。
起初,常量池是空的,当程序中出现String字面常量时,会在常量池中搜索是否存在该String对象,即使用String类的equals方法来判断,如果不存在,就将这个字面常量加入常量池中,并返回该对象;否则直接返回常量池中的对象。

<2> String字面常量和String常量表达式都会加入常量池中。

<3> 满足什么条件才算是String常量表达式呢?

即就是在编译的时候就可以确定其值的String类型表达式。编译器的原则是:能在编译期间计算的,就不会留到运行时再去计算。

第一种: 表达式全部由String字面常量拼接

String s = "a" + "b" + "c";

第二种: 表达式由String字面常量,基本类型字面常量,final修饰的String引用,final修饰的基本数据类型任意组合组成。

String s = "a" + 5; // String常量表达式final String str = "a";
String s = "bc" + str; // String常量表达式final int num = 5;
String s = "a" + num; // String常量表达式String s = str + num; // String常量表达式

<4> intern方法 - 拘留字符串

如果需要将某个String对象加入常量池中,就可以调用intern方法来完成,这个操作也称作拘留字符串。
系统自动将String字面常量与String常量表达式的字符串值加入常量池中,也是通过调用intern方法来实现的。

要点总结:

String类维护一块特殊的区域,称为常量池。因为String对象是不可改变的,因此没有必要创建两个相同的String对象。只需将String对象加入常量池,在需要的时候取出,这样即可实现String对象的共享。
在程序中出现String编译时常量(String字面常量与String常量表达式),会自动调用intern方法,如果常量池中含有相等的String对象(使用String类的equals方法来判断),则直接返回常量池中的对象;否则将对象加入常量池中并返回该对象。
对于运行时创建的String对象(非String编译时常量),会分配到堆中,系统不会自动调用intern方法拘留该对象,不过我们依然可以自行调用该对象的intern方法对该对象进行拘留。

最后,祝大家早日学有所成,拿到满意offer

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

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

相关文章

Miniprofiler在普通net项目中的使用

MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序。可以对一个页面本身&#xff0c;及该页面通过直接引用、Ajax、Iframe形式访问的其它页面进行监控,监控内容包括数据库内容&#xff0c;并可以显示数据库访问的SQL&#xff08;支持EF、EF CodeFirst等…

11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载

11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载 请点击下面的连接下载[url]http://cid-b10793e754ad25f7.skydrive.live.com/browse.aspx/IE8Training[/url]里面有3个文件&#xff0c;内容包含了IE8课程的主要内容转载于:https://blog.51cto.com…

加州大学惊现神操作!物理教授用数学论文摆脱400美元交通罚单,却惨被网友大反转.........

全世界只有3.14 % 的人关注了青少年数学之旅“学好数理化&#xff0c;走遍天下都不怕。”这句从上个世纪八十年代流传下来的金句&#xff0c;至今仍然哺育着理工科的莘莘学子。为了让模友们更好的理解这句话&#xff0c;今天就让小天给你们涨涨姿势&#xff0c;见识一下什么是学…

VMware虚拟机VMDK 快照 数据恢复成功

VMware虚拟机VMDK 快照 数据恢复成功【故障描述】某影院使用的票管理系统安装在一台虚拟中&#xff0c;数据库采用的是Oracle9I,虚拟机在安装好后做了一次快照&#xff0c;期间又做过一次快照&#xff0c;在正常使用过程&#xff0c;虚拟突然崩溃&#xff0c;无法启动&#xff…

phppage类封装分页功能_php显示页码分页类的封装

本文实例为大家分享了php封装显示页码的分页类&#xff0c;供大家参考&#xff0c;具体内容如下一、代码conn.phpclass Mysql{public function __construct(){$this->connect();}public function connect(){$connmysql_pconnect(localhost,root,root) or die("Connect …

[转]两个经典的windbg调试案例,值得学习。

1. 调试Bug的神兵利器&#xff1a;通过WinDbg条件断点收集Log 原文地址&#xff1a;http://blogs.msdn.com/yizhang/archive/2009/03/30/bug-windbg-log.aspx 调试Bug的神兵利器&#xff1a;通过WinDbg条件断点收集Log 前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug。…

设计模式之观察者

观察者模式介绍观察者又名事件订阅者、监听者。观察者模式是一种行为设计模式&#xff0c;允许你定义一种订阅机制&#xff0c;可在对象事件发生时通知多个“观察者”该对象的其他对象。通知目标&#xff1a;拥有一些值得关注的状态的对象。发布者&#xff1a;它要自身的状态改…

热姜水的神奇妙用

人们通常会在着凉以后&#xff0c;泡一壶姜茶来喝&#xff0c;来预防感冒&#xff0c;其实热姜水除了这个作用以外还有几大作用的。     醉酒 用热姜水代茶饮用&#xff0c;可消化体内酒精。脚臭 热姜水中加点盐和醋&#xff0c;浸泡双脚15分钟左右&#xff0c;脚臭便可消…

二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?

二面京东被问到Java 反射&#xff0c;我直呼好家伙&#xff0c;这我不是必过吗&#xff1f;用多久我会升职加薪、当上技术总监、迎娶漂亮学姐、走上人生巅峰&#xff01;想想还有点小激动。 好了开始分享面试经历 说说你反射的理解 到底什么是反射呢&#xff1f;&#xff1f;…

通用路由封装(GRE)×××配置

本人没有很好的文采&#xff0c;只能直接配置&#xff0c;有不懂的地方&#xff0c;后面可以联系我&#xff0c;在配置当中&#xff0c;我会尽量在配置命令后面加标注。1、在R1上配置相关的命令R1&#xff08;config&#xff09;#int fa0/0 ---进入以太网fa0/0接口--R1&#…

数字怎么横 竖排_从这些数字更深入了解打包箱房

很多人对于彩钢房和一般瓦楞版集装箱活动房可能比较了解&#xff0c;但是对于打包箱房就相对了解甚少&#xff0c;这里通过一组数字来告诉大家&#xff0c;打包箱房到底怎么样&#xff1f;一、打包箱房标准房子的标准为外部(3米X 6米X2.7米)、内部是(2.83米X5.83米X2.52米)二、…

gridview DataFormatString

转有个时间要在gridview中显示,但是保持着数据库中的是标准时间,很长,而且只需要显示日期,就想要格式化字符串,可是设置了DataFormatString就是不起作用,后来一查,原来要设置"行为"中HtmlEncode false DataFormatString"{0:格式字符串}" 在DataFormatStri…

太神奇了!使用C#实现自动核验健康码:(1)二维码识别

前言因为疫情的原因&#xff0c;无论是进入商场还是医院、车站&#xff0c;都需要出示健康码。现在基本都是采取人工方式核验健康码&#xff0c;看到绿码就通过&#xff0c;否则就禁止进入。但是&#xff0c;单靠人工核验健康码容易造成人员拥堵&#xff0c;增加病毒交叉感染的…

三角形中惊现叛徒!自己胖的像个球,却能成就世界上最快的赛车引擎......

全世界只有3.14 % 的人关注了青少年数学之旅一日&#xff0c;理科生上山寻访禅师。理科生问禅师&#xff1a;“大师&#xff0c;世人为何总嫌我棱角太突出&#xff0c;不合群&#xff01;”禅师思索一阵&#xff0c;掏出数根圆柱铺在地上&#xff0c;在上面搁了一块木板&#x…

无线专业术语

1. IEEE 802.11b IEEE 802.11b是IEEE&#xff08;电气和电子工程师协会&#xff09;1999年9月推出的一个无线局域网标准&#xff0c;采取2.4GHz频段&#xff0c;传输速率最高11Mbps。 2 IEEE 802.11g IEEE 802.11g是IEEE 802.11b标准的继承者&#xff0c;它提供高达54M…

Primes on Interval

AC代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn 1001000; #define inf (1<<29) //上面的位运算还真心没有看懂 // p[i] is i-th primes position b…

我丢,去面试初级Java开发岗位,被问到泛型?

1、泛型的基础概念 1.1 为什么需要泛型 List list new ArrayList();//默认类型是Objectlist.add("A123");list.add("B234");list.add("C345");System.out.println(list);for(int i0;i<list.size();i){//若要将list中的元素赋给String变量&a…

xp下设置文件的权限(转)

第一步&#xff1a; 1&#xff0c;我的电脑&#xff0d;&#xff0d;工具&#xff0d;&#xff0d;文件夹选项&#xff0d;&#xff0d;查看 去掉”使用简单文件共享”的选中状态&#xff0e;确定 第二步&#xff1a; 右击 D 盘 &#xff0d;&#xff0d; 安全 &#xff0d;&am…

echart 地图 某个地区_中国饮食地图来袭!你爱的口味暗藏健康隐患吗?

食&#xff0c;既是人生存之根本&#xff0c;也是人们热爱生活的体现。中国地域广阔、物产富饶&#xff0c;中国人对“吃”看重也愿钻研&#xff0c;种种因素造就了中国美食 “百花齐放”的局面&#xff0c;在“吃货”眼里&#xff0c;中国地图俨然就是一张美食地图。不同地区的…

面试官:实现一个带值变更通知能力的Dictionary

如题&#xff0c; 你知道字典KEY对应的Value什么时候被覆盖了吗&#xff1f;最近大家都在追.Net6 update&#xff0c;咱还是保持节奏&#xff0c;通用语言聊技术。没背景说个铲铲上文中 数据获取组件维护了业务方所有(在用)的连接对象&#xff0c;DBA能在后台无侵入的切换备份库…