面试题 -- Java初级开发

Java初级开发面试题

2019-11-02  17:40:45  by冲冲


1、String

String是定义在 java.lang 包下的一个类。它不是基本数据类型。String是不可变的。

JVM使用字符串池来存储所有的字符串对象。字符串常量池存在于Java的堆内存中。(JDK1.6及以前常量池放置于方法区/永久代,JDK1.7开始放置于堆,可能是因为方法区太小了)

① 问题:该段代码中有几个字符串被创建?

String str = new String("Cat");

解析:将会创建1或2个字符串。如果在字符串常量池中已经有一个字符串“Cat”,那么就会创建一个“Cat”字符串。如果字符串常量池中没有“Cat”,那么首先会在字符串池中创建,然后才在堆内存中创建,这种情况就会创建2个对象了。

② 比较各种场景的String

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");

System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s3==s4); //false

System.out.println(s1.equals(s3)); //true
System.out.println(s3.equals(s4)); //true

③ 问题:下面的代码将创建几个字符串对象?

1 String s1 = new String("Hello");
2 String s2 = new String("Hello");

答案是3个对象.。

第一,行1 在字符串池中创建“hello”对象。第二,行1在堆内存中创建带有值“hello”的新字符串。第三,行2在堆内存中创建带有值“hello”的新字符串。这里“hello”字符串池中的字符串被重用。

④ 问题:下面的代码输入什么?

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

String的intern()方法:当intern()方法被调用,如果字符串池中含有一个字符串和当前调用方法的字符串eqauls相等,那么就会返回池中的字符串。如果池中没有的话,则首先将当前字符串加入到池中,然后返回引用。因为该段代码没有分配到S2,S2没有变化,如果该第三行代码为 s2 = s2.intern(),则输入true。

⑤ String是线程安全的吗?

String是不可变类,一旦创建了String对象,我们就无法改变它的值。因此,它是线程安全的,可以安全地用于多线程环境中。

StringBuffer是线程安全的,使用Synchronized锁。

StringBuilder是线程不安全的。

⑥ 下面的代码输入什么?

String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));

输入false,因为s2不是String类型,String的equals方法进行了类型判断。

⑦ 为什么我们在使用HashMap的时候总是用String做key?

因为字符串是不可变的,当创建字符串时,它的hashcode被缓存下来,不需要再次计算。因为HashMap内部实现是通过key的hashcode来确定value的存储位置,所以相比于其他对象更快。

原文地址:https://www.cnblogs.com/yadiel-cc/p/11784108.html

时间: 2024-11-08 18:33:17

面试题 -- Java初级开发的相关文章

美女求JAVA初级开发职位

//我知道自己算不上美女,标题上写美女纯粹是为了吸引眼球,轻拍 过完年了,想找工作,感觉在商用环境下自己的技术能提高的更快一些. 求JAVA初级开发或者实习生职位. 工作地点最好在上海 简单介绍下自己: 毕业好几年了,一直觉得自己是靠运气和勤奋行走江湖 虽然跌跌撞撞,但也一路走到今天 可是没有掌握什么技术一直是心中的遗憾 2014年9月开始在家里全职学习JAVA--(JAVA就是我要掌握的技术) 计划此生投身计算机界 通过看马士兵老师的视频,外加看书学习--(我还是很喜欢马老师讲课的风格的) 昨

JAVA初级开发

API 初级必看四个包: java.io,  java.lang,  java.text, java.util MVC(Model View Controller):是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码; 过程:客户端(浏览器或移动端) 发送请求①(request) 到 服务器(Tomcat,Weblogic等) ,服务器处理请求②, 处理请求根据WEB.XML分配到各个操作类(actio

java初级开发程序员(第七单元;总结前六章)

第一章总结: 1.java的是sun公司(现甲骨文有限公司)于1995年推出的高级编程语言,java技术可以应用在几乎所有类型和规模的设备上,小到计算机芯片.蜂窝电话,大到超级计算机,无所不在. 2.在当前的软件开发行业中,java已经成为了绝对的主流,java领域的java SE.java EE已发展成为同microsoft(微软)公司的c#和.NET技术平分天下的应用软件开发技术和平台.因此,有人说掌握了java语言就号准了软件开发的“主脉”. 3.在记事本上开发 ①:编写     在记事本

java初级开发中的报错问题

  1.典例1 错误原因:?useUnicode=true&characterEncoding=UTxF8 纠错:其中的? 是汉语的 2.典例2 纠错原因:数据库没有打开 纠错: 我的电脑-->右键-->管理-->服务和应用程序-->服务--->找到mysql 3.典例3 纠错原因:项目启动异常 web_xml中的url_pattern里面的配置没有加斜杠 / 纠错:把斜杠加上 4.典例4 纠错原因:类路径错误 src中java类的路径和web.xml中servlet

java初级开发程序员(第二单元)

*课前必背.需要记忆的单词: double   小数    String  字符串    character   字符 integer  整型    Scanner  扫描仪   score    分数 boolean  布尔类型      true   真     false    假 1.变量三要素: ①:变量类型 ②:变量名 ③:变量值 2.java常用的八种数据类型 整数类型:int(32)  long(64)  byte(8)   short(16) 小数类型:double(64)双精

java初级开发程序员(第五单元)

1.循环结构(一):   语法:       while(循环条件){ //循环操作 } 示列代码: int i=1; while(i<=100){ System.out.println("好好学习!!"); i=i+1; } 2.什么是循环结构:由以上分析可以看出,所有的循环结构都有这样的特点:首先,喜欢不是无休止地进行,满足一定的条件的时候循环才会继续,称为:“循环条件”,循环条件不满足的时候,循环退出:其次,循环结构是反复进行相同的或类似的一系列操作,称为“喜欢操作”. 3

java初级开发程序员(第六单元)

1.for循环结构: 循环结构分为四个部分. >初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0. >循环体:重复执行的代码,即输出“好好学习,天天向上!”. >迭代部分:下一次循环开始前要执行的部分,在while循环结构中他作为循环体的一部分,如使用“i++;”进行循环次数的累加. >循环条件:判断是否继续循环的条件,如使用“i<100”判断循环次数是否已经达到100. 2.在for循环结构中,这几个部分同样必不可少,不然循环就会出现错误.for循环的一般格式如

年底了,如何准备 Java 初级和高级的技术面试?

朋友最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论. 相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的"大忽悠". 其实倒也不是我故意要为难候选人,毕竟入职后就是同事,但面试官的职责使然,而且,如果资深的面试官一般也这样. 写到这里,恐怕会吓到一些想要面试的朋友,能力强和能力弱

面试大厂回来后,有一些话想对 Java 后端开发说一说

在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的. 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断. 但现实情况是,大多数人可能面试前没准备,或准备方法不得当.要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类