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,一经查实,立即删除!

相关文章

Transactional cannot be resolved to a type

SpringBoot整合Mybatis时遇到“ Transactional cannot be resolved to a type ” ,以为是没有导入相应的包 “ import org.springframework.transaction.annotation.Transactional; ” ,导入发现还是报错,在Stack Overflow上找到解决办法。在…

[vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的?

[vue] 有在vue中使用过echarts吗?踩过哪些坑?如何解决的? vue 没用过echarts react到是用过 不过我想应该差不多 ,多注意dom的渲染时机 和chart的实例化时机 在相应的生命周期方法中做操作。结合强制刷新 应该就能解决大部分问题…

终于通过了~

申请博客园的blog真TM费尽,提交了N次申请都没成功,说什么“期待你更详细的申请理由”,我靠,管理还真TMD严格啊。 不过觉得这个blog做的还真不错,而且人也比较多,hoho~。 以后偶会…

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

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

[vue] 说说你对单向数据流和双向数据流的理解

[vue] 说说你对单向数据流和双向数据流的理解 单向数据流:所有状态的改变可记录、可跟踪,源头易追溯;所有数据只有一份,组件数据只有唯一的入口和出口,使得程序更直观更容易理解,有利于应用的可维护性&…

值类型和引用类型

值类型(如 char、int 和 float)、枚举类型和结构类型。 引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。 值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。 对于引用类型,两…

java设计模式在项目中的使用_SpringMVC项目里,有必要使用一些设计模式吗?

背景为了兼容多种业务,想在项目中使用一些设计模式,以便于管理。例如,我需要创建用户并返回userid,每种业务创建的方式都不一样。我选取了“适配器模式”,但是我发现,在springmvc的管理下,常常需…

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

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

[vue] SSR解决了什么问题?有做过SSR吗?你是怎么做的?

[vue] SSR解决了什么问题?有做过SSR吗?你是怎么做的? SSR server side render服务端渲染,解决spa应用缺点的首屏加载速度慢、不利于SEO问题个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,…

常用英语对话

妙语佳句(1)  1. It‘s not like that. 不是那样的   It‘s not like that.这句话是用来辟谣的。当别人误会了一件事的来龙去脉,你就可以跟他说It‘s not like that.「不是那样的。」当然随着语气及情境的不同,It‘s not like that.这句话也有可能是…

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

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

java获取xls在项目路径_JAVA获取项目路径

在jsp和class文件中调用的相对路径不同。 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。另:在Jsp,Servlet,Java中详细获得路径的方法!1.jsp中…

[vue] 你有自己用vue写过UI组件库吗?

[vue] 你有自己用vue写过UI组件库吗&#xff1f; {{item.title}}<dl v-if"item.list.length > 0"><dd v-for"(item2,index2) in item.list" :index"index2" :key"item2.title"><router-link :to"item2.route&…

在字符串中使用引号()等字符 需要用转义字符\ 例如

Response.Write("<script language\"javascript\">alert(输入的时间格式不正确&#xff01;);</script>"); 转载于:https://www.cnblogs.com/cuihongyu3503319/archive/2006/11/06/551830.html

java通用分页条件查询_通用分页查询

packagecom.dao;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importcom.bean.Author;importcom.db.DB;importcom.mysql.jdbc.Connection;importcom.mysql.jdbc.PreparedStatement;public classAuthorDao {//检验用户…

jq 在字符串中,去掉指定的元素

例&#xff1a; var arr ["4.5岁", "3.5岁", "5.5岁", "5岁", "4岁"] var num arr.replace(/岁/ig, ) console.log(num)结果为&#xff1a;["4.5", "3.5", "5.5", "5", "4&q…

[vue] 说说你对v-clock和v-pre指令的理解

[vue] 说说你对v-clock和v-pre指令的理解 v-cloak指令只是在标签中加入一个v-cloak自定义属性&#xff0c;在HTML还编译完成之后该属性会被删除。 v-pre可以用来阻止预编译&#xff0c;有v-pre指令的标签内部的内容不会被编译&#xff0c;会原样输出。个人简介 我是歌谣&…

“偷懒”的表单验证Demo

我们在做开发时&#xff0c;经常要做表单验证&#xff0c;比如验证文本框必须填内容时&#xff0c;而文本框又很多时&#xff0c;传统的做法是逐个判断: if (form1.name.value "") { alert("Sorry,please input your name!") form1.focus(); } 这样一来要…

java连接u盘_虚拟机VM6.0 LINUX redhat 挂接U盘,访问U盘

虚拟机VM6.0 LINUX9.0modprobe usb-storage挂上以后&#xff1a;fdisk -l /dev/sd*只显示SDA&#xff1a;SDA1,SDA2,SDA3这三个虚拟盘没有找到其他的U盘设备现在虚拟机LINUX的右下角显示出来USB设备的图标&#xff0c;但输入命令:fdisk -l 后只显示SDA1,SDA2和SDA3设备问&#…

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

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