java builder pool_每周10道Java面试题:String, String Pool, StringBuilder

每周10道 Java 面试题由 ImportNew 整理编译自网络。

1. 写出下面代码的运行结果。

int src = 65536;

Integer dst = new Integer(65536);

System.out.println(src == dst);

System.out.println(dst.equals(src));

答案: true true

考点: Integer 的 equals 实现。查看源代码可以发现,65536 装箱为 Integer 对象后,dst.equals 方法比较的是 obj.intValue。

public boolean equals(Object obj) {

if (obj instanceof Integer) {

return value == ((Integer)obj).intValue();

}

return false;

}

2. 写出下面代码执行结果。

// 1. 打印 null String

String s = null;

System.out.println(s);

// 2. 打印 null Integer

Integer i = null;

System.out.println(i);

// 3. 打印 str

String str = null;

str = str + "!";

System.out.println(str);

答案:

null

null

null!

考点: 打印函数 print 与字符串拼接函数对 null 都进行了特殊处理,因此不会出现运行时异常,而是输入出 “null” 字符串。

细节分析可参见 Importnew:Java String 对 null 对象的容错处理  一文。

3. 写出下面代码的运行结果。

public class Example {

private static void sayHello() {

System.out.println("Hello");

}

public static void main(String[] args) {

((Example)null).sayHello();

}

}

答案: Hello

考点:

null 作为非基本类型,可以做类型转换,转换后调用静态方法输出字符串。基本类型,比如 int,类型转换时会报告空指针异常,比如 int a = (Integer)null; 原因就是转换过程中会调用 intValue(),因此会报告异常。

4. String类能被继承吗,为什么?

答案: 不能。因为 String 类的定义为 final class,被 final 修饰的类不能被继承。

public final class String

考点: String 对象不可变的(immutable)。分析为什么要这么设计,可能有以下3个原因:

String pool:这是方法(method)区域里一个特殊的存储区域,创建一个 String 时,如果已经在 String pool 中存在,那么会返回已存在的 String 引用。

允许 String 缓存 hashcode:String 定义中,有 hash 成员变量 private int hash; // 默认为0,对 hashcode 进行缓存。

安全性:确保不会被恶意篡改。

5. 写出下面代码的运行结果。

String s1 = "Cat";

String s2 = "Cat";

String s3 = new String("Cat");

System.out.println("s1 == s2 :"+(s1==s2));

System.out.println("s1 == s3 :"+(s1==s3));

答案:

s1 == s2 :true

s1 == s3 :false

考点: 理解 String pool,s1 与 s2 字符串内容相同,因此直接从 String pool 中返回相同的地址。s3 会创建一个新的 String 对象,因此 s1==s3 结果返回 false。

6. String s3 = new String(“Cat”) 这句代码会创建几个 String 对象?

答案: 1 或 2 个。

考点: 理解 String pool 机制。如果 Spring pool 在执行语句之前没有 “Cat” 对象,那么会创建 2 个 String;反之只创建 1 个 String 对象,”Cat” 会从 String pool 中直接返回对象。

7. String、StringBuffer、StringBuilder的区别?

答案: 有以下区别:

String 是不可变的,StringBuffer、StringBuilder 是可变的;

String 、StringBuffer 是线程安全的,StringBuilder 不是线程安全的。

StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

8. 如何比较两个字符串?使用 “==” 还是 equals() 方法?

答案: 简单来讲,“==” 测试的是两个对象的引用是否相同,而equals()比较的是两个字符串的值是否相等。除非你想检查的是两个字符串是否是同一个对象,否则你应该使用 equals() 来比较字符串。

用之前的例子:

String s1 = "Cat";

String s3 = new String("Cat");

System.out.println("s1 == s3 :"+(s1==s3));

System.out.println("s1.equals(s3) :"+(s1.equals(s3)));

运行结果:

s1 == s3 :false

s1.equals(s3) :true

9. 为什么针对安全保密高的信息,char[] 比 String 更好?

答案: 因为String是不可变的,就是说它一旦创建,就不能更改了,直到垃圾收集器将它回收。而字符数组中的元素是可以更改的,这就意味着你可以在使用完之后将其更改,而不会保留原始数据。所以使用字符数组的话,安全保密性高的信息,如密码之类信息,将不会存在于系统中被他人看到。

10. 可以针对字符串使用 switch 条件语句吗?

答案: JDK 7 及更新版本可以,在JDK 6或者之前的版本,则不能使用 switch 条件语句。

关于作者:唐尤华

e2b9107268c176e375348e750805bdd7.png

我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个 程序员 的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。(新浪微博: @唐尤华 )

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

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

相关文章

将字符串中的字符按Z字形排列,按行输出

示例1: Input: s "PAYPALISHIRING", numRows 3 Output: "PAHNAPLSIIGYIR" 示例2: Python解决方案: def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""…

大型网络架构变迁和知识图谱

——仅供个人学习使用,如有侵犯版权,请作者联系我,立马处理。 【前端页面缓存】 sessionStorage,localStorage,userData,cookie, [sessionStorage] h5后出现的新技术,这个生命周期短,当页面关闭后,存储资源…

H265摄像头如何实现网页直播

介绍 目前安防监控行业,基本所有的摄像头都支持H264编码,但是已经有部分摄像头开始支持H265,并且支持H265的摄像机已经越来越多。H265相比H264有着很多优势,是压缩更高,网络传输消耗的带宽更小,相同码率下H…

【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择

很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿。 看好了主要步骤就4部 1、确定谷歌浏览器版本 2、找到谷歌浏览器版本与ChromeDriver版本对应关系 3、下载ChromeDriver…

[贴图]TVB香港大部分演员照片、姓名(值得收藏)

转载于:https://www.cnblogs.com/chinhr/archive/2006/11/15/561101.html

我的世界java笔刷指令_《我的世界》基本笔刷教程

《我的世界》是一款3D的第一人称沙盘游戏,所呈现的世界并不是华丽的画面与特效,而是注重在游戏性上面。玩家在游戏中做着建设与破坏两件事,但是透过像乐高一样的积木来组合与拼凑,轻而易举的就能制作出小木屋、城堡甚至城市&#…

idea创建springcloud主工程和springboot子项目

创建主工程,选择file-new-project,选择maven,直接next 填写GroupId包名,ArtifactId项目名,next-finish 创建子项目springboot,项目右击-new-module-Spring Initializr-->next 填写项目相关信息,next 选择Clou…

小程序实现无限瀑布流

实现瀑布流 实现效果 有好几种方案 1.用column-count属性把页面元素分为俩列或多列来实现 2.用display flex 分列来展示页面 3.比如说用js实现 我今天介绍的就是第三种,因为前两种都会有局限,实现的效果我们希望是左右左右,而不是分成两列去显…

python canny检测_【数字图像分析】基于Python实现 Canny Edge Detection(Canny 边缘检测算法)...

Canny 边缘检测算法Steps:高斯滤波平滑计算梯度大小和方向非极大值抑制双阈值检测和连接代码结构:Canny Edge Detection|Gaussian_Smoothing||convolution.py|||convolution()||gaussion_smoothing.py|||dnorm()|||gaussian_kernel()|||gaussian_blur()|Sobel_Filte…

java 拖放文字_myeclipse2014如何实现jsp中的html代码的文字拖放

本帖最后由 liyihongcug 于 2015-3-5 16:53 编辑把 jsp打开 (visual jsp editor)之后上班区 单击右键 show --- pallette就可以了感叹myeclipse确实强大的 标签技术强于.net mvc强。vs2013能实现iis无需安装的情况下 动态指定 某个页面为首选 启动 --------------------希望2…

因缺思厅的绕过

看一下页面源码,看到source.txt。所以进入同目录下的source.txt 代码审计下,并且百度了一些函数。过滤了很多关键字,因此常规的SQL注入没有头绪。想了挺久,因为要满足三个条件。1:不能输入过滤的关键字2:只…

Python自制微信机器人:群发消息、自动接收好友

运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求、群发文章、自动回复等操作,但颇有不便。 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一下。好…

记一次webpack4+react+antd项目优化打包文件体积的过程

背景 最近自己整了一个基于webpack4和react开发的博客demo项目,一路整下来磕磕碰碰但也实现了功能,就准备发到阿里云上面去看看,借用了同事的阿里云小水管服务器,配置完成之后首页加载花了十几秒,打开控制台network查看…

[19/03/16-星期六] 常用类_Date时间类DateFormat类

一、Date时间类 计算机中 以1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一) 用ong类型的变量来表示时间,如当前时刻数值:long now new System.currentTimeMillis(); 【常用方法】 1. Date() 分配一个Date对象&a…

实验一作业

Part1:实验总结体会 1.实验过程对程序编码的使用不熟练,经常在书写代码过程中有停顿与疑惑,但熟能生巧,经过训练还是有不少收获; 2.实验内容不够严谨,容易犯小错误,还是需要勤加练习&#xff1b…

php7引用计数,PHP7 引用计数 读书笔记

PHP7 引用计数 读书笔记每个 PHP 变量存在一个加 "zval" 的变量容器中. 一个 zval 变量容器, 除了包含变量的类型和值, 还包括两个字节的额外信息.1.is_ref : 是一个 bool 值, 用来标识这个变量是否属于引用集合. 通过这个字节, PHP 引擎才能把普通变量和引用变量区分…

焦呼?焦矣!

焦了。做了个香蕉蛋糕。总觉得它还没熟,就让它没完没了地烤着。于是焦了。可里面居然还是湿润的。是蛋糕的问题,还是6寸模的问题,还只是人的问题?烤一半时,爹临出门时,过来往上头按了一大拇指。很好&#x…

AJAX(2),我的第一个AJAX程序

首先&#xff0c;在VS2005中新建一个网站&#xff0c;拖入一个Button和Text,设置Button的客户端事件为userCheck(),<asp:TextBox ID"username"runat"server"></asp:TextBox><input type"button"name"check"value"…

[导入]ASP.NET 2.0中Page事件的执行顺序

文章来源:http://blog.csdn.net/21aspnet/archive/2007/03/20/1535517.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/21/816354.html

[导入]C#中TextBox只能输入数字的代码

文章来源:http://blog.csdn.net/21aspnet/archive/2007/03/20/1535640.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/21/816242.html