一些Java面试题深入分析

一、&和&&的区别?

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33& ++y>0) y会增长,If(x==33
&& ++y>0)不会增长

&不具有短路性质,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式依然会执行,所以会出现NullPointerException,除此之外,&还可以用作位运算符。

二、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

在switch(expr1)中,expr1可以是 byte, char, short,int 以及它们的包装类 Byte ,Character,  Short, Integer,还有enum(枚举)、String(JavaSE 7增加的)

参考官网http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

三、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

final StringBuffer a=new StringBuffer("immutable");

执行如下语句将报告编译期错误:

a=new StringBuffer("");

但是,执行如下语句则可以通过编译:

a.append(" broken!");

有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

public void method(final  StringBuffer param)

{

}

实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("a");

四、当执行String str=new String("abc");时,到底创建了多少个String对象?

如果再网上搜答案,几乎都是这样回答的:

如果String pool没有abc这个字符串 的话就在字符串池创建abc的对象,再是在堆里创建一个abc的对象,把堆里的abc对象地址返回给str 这个情况是创建2个对象,否则就只有在堆里创建一个abc的对象

可是,我今天看到一个讲解视频,他说任何情况都只创建一个String对象。任何情况都不会在字符串池创建abc的对象,论据:

		String s1="hjk";
		String s2=s1.intern();        //intern()的作用是如果在常量池中存在s1的字符串值“hjk”,则
					     //返回该字符串对象,否则在常量池添加“hjk”,并把该字符串对象返回。
		System.out.println(s2==s1);   //true
		String s3=new String("abc");
		String s4=s3.intern();
		System.out.println(s3==s4);  //false

		String s5=s3.intern();
		System.out.println(s5==s4);  //true

另可参考:Java面试题视频讲解http://study.163.com/course/courseMain.htm?courseId=519065#/courseMain

一些Java面试题深入分析

时间: 2024-10-12 12:56:59

一些Java面试题深入分析的相关文章

Java面试题必备知识之ThreadLocal

老套路,先列举下关于ThreadLocal常见的疑问,希望可以通过这篇学习笔记来解决这几个问题: ThreadLocal是用来解决什么问题的? 如何使用ThreadLocal? ThreadLocal的实现原理是什么? 可否举几个实际项目中使用ThreadLocal的案例? 基础知识 ThreadLocal是线程局部变量,和普通变量的不同在于:每个线程持有这个变量的一个副本,可以独立修改(set方法)和访问(get方法)这个变量,并且线程之间不会发生冲突. 类中定义的ThreadLocal实例一

java面试题(非原创)

一.开场白简单的介绍一下自己的工作经历与职责,在校或者工作中主要的工作内容,主要负责的内容:(你的信息一清二白的写在简历上,能答出来的最好写在上面,模棱两可不是很清楚的最好不要写,否则会被问的很尴尬)介绍下自己最满意的,有技术亮点的项目或平台,重点介绍下自己负责那部分的技术细节:(主要对自己做过的事情是否有清晰的描述)二.Java基础 什么是字符串常量池? String为什么是不可变的? String s = new String("xyz");究竟产生了几个对象,从JVM角度谈谈?

Java面试题全集(中)

这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程

Java面试题下

这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题,如果需要了解相关内容,可以参考我的另一篇文章<Java面试题集(86-115)>.此外,这篇文章还对企业应用架构.大型网站架构和应用服务器优化等内容进行了简单的探讨,这些内容相信对面试会很有帮助. 126.什么是ORM?答:对象关系映射(Object-Relational Mapping,简称OR

java面试题及答案

JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

【福利 】Java面试题最全 (中)

这部分主要是与Java Web和Web Service相关的面试题. 阅读全文 更多: java,java学习,java面试题  http://techfoxbbs.com

【福利 】Java面试题最全 (下)

这部分主要是开源Java EE框架方面的内容,包括Hibernate.MyBatis.Spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题 阅读全文 更多java,java学习,java面试题 http://techfoxbbs.com

Java面试题笔记

这是我从网上收集的常见Java面试题及答案,但只收录了我不会做的题目. 创建线程有几种不同的方式?你喜欢哪一种?为什么? 有三种方式可以用来创建线程: 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类.在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口.同时,线程池也是非常高效的,很容易实现和使用. 在监视器(Monitor)内部,是如

JAVA面试题最全集

JAVA面试题最全集 2009-01-19 15:40 3458人阅读 评论(0) 收藏 举报 java面试ejbservletstringhashmap 一.Java基础知识1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别.2.字符串的操作:  写一个方法,实现字符串的反转,如:输入abc,输出cba  写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc.3.数据类型之间的转换  如何将数值型字符转换为数字(Integer,Doubl