面试题目录
文章目录
- 面试题目录
- 前言
- 一、&和&&的区别
- 二、八种基本数据类型的大小,以及他们的封装类
- 三、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
- 四、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
- 五、char 型变量中能不能存贮一个中文汉字?为什么?
- 六、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- 七、"=="和 equals 方法究竟有什么区别?
- 八、静态变量和实例变量的区别?
- 九、Integer 与 int 的区别?
- 十、作用域 public,private,protected,以及不写时的区别
- 总结
前言
为了减轻大家的负担和节省大家的时间,一些过时知识点和被笔试概率极低的题目不再被收录和分析。
一、&和&&的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与(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)不会增长
二、八种基本数据类型的大小,以及他们的封装类
基本类型 |
大小(字节)
| 默认值 | 封装类 |
byte | 1 | (byte)0 | Byte |
short | 2 | (short)0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
boolean | ~ | false | Boolean |
char | 2 | \u0000(null) | Character |
三、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
在 switch(expr1)中,expr1 只能是一个整数表达式或者枚举常量(更大字体),整数表达
式可以是 int 基本类型或 Integer 包装 类型, 由于,byte,short,char 都可以隐含转换为 int,所以,
这些类型以及这些类型的包装类型也是可以的。显然,long 和 String 类型 都不符合 switch 的语法
规定,并且不能被隐式转换成 int 类型,所以,它们不能作用于 swtich 语句中(之前的回答是这样
的)。但是 JDK1.7 之后,switch 也支持了 String(注意)
四、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 运算时会自动提升表达式的类型,所以结果是 int
型,再赋值给 short 类型 s1 时,编译器将报告需要强制转换类型的错误。对于 short s1 = 1; s1+=
1;由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。
五、char 型变量中能不能存贮一个中文汉字?为什么?
char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以,
char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符
集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:unicode 编码占用两个字
节,所以,char 类型的变量也是占用两个字节。 备注:后面一部分回答虽然不是在正面回答题
目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做
到知无不言,言无不尽。
六、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还
是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");
执行如
下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append(" broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来
的参数对象:
public void method(final StringBuffer param) {}
实际上,这是办不到的,在该方法内
部仍然可以增加如下代码来修改参数对象:
param.append("a");
七、"=="和 equals 方法究竟有什么区别?
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起
说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应
的内存中所存储的数值是否相同,要比较两个基本类 型的数据或两个引用变量是否相等,只能用
==操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占
用一块内存(堆内存),变量也占用一块内 存,例如 Objet obj = new Object();变量 obj 是一个内
存,new Object()是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对 象占用的那块
内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两
个变量所对应的内存 中的数值是否相等,这时候就需要用==操作符进行比较。 equals 方法是用于
比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独
立的。例如, 对于下面的代码: String a=new String("foo"); String b=new String("foo"); 两条 new
语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,
它们的首地址是不同的, 即 a 和 b 中存储的数值是不相同的,所以,表达式 a==b 将返回 false,
而这两个对象中的内容是相同的,所以,表达式 a.equals(b)将返 回 true。在实际开发中,我们经
常要比较传递进来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不
注意就使 用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有
大量这样的错误。记住,字符串的比较基本上 都是使用 equals 方法。 如果一个类没有自己定义
equals 方法,那么它将继承 Object 类的 equals 方法,Object 类的 equals 方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
八、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。 在程序运行时的
区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才
能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序
加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用
了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来
引用。 例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个 staticVar 变量,
并且每创建一个实例对象,这个 staticVar就会加 1;但是,每创建一个实例对象,就会分配一个
instanceVar,即可能分配多个 instanceVar,并且每个 instanceVar 的值都只自加了 1 次。
public class VariantTest {
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest() {
staticVar++;
instanceVar++;
System.out.println(“
staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
}
九、Integer 与 int 的区别?
int 是 java 提供的 8 种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是
java 为 int 提供的封装类。int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出
未赋值和值为 0 的区别,int 则无法表达出未赋值的情况,例如,要想表达出没有 参加考试和考试
成绩为 0 的区别,则只能使用 Integer。在 JSP 开发中,Integer 的默认为 null,所以用 el 表达式
在文本框中显示时,值 为空白字符串,而 int 默认的默认值为 0,所以用 el 表达式在文本框中显示
时,结果为 0,所以,int 不适合作为 web 层的表单数据的 类型。Integer 提供了多个与整数相关
的操作方法,例如,将一个字符串转换成整数,Integer 中还定义了表示整数的最大值和最小值的
常量。
十、作用域 public,private,protected,以及不写时的区别
这四个作用域的可见范围如下表所示。
作用域 | 当前类 | 同一package | 子孙类 | 其他package |
public |
√
|
√
|
√
|
√
|
protected |
√
|
√
|
√
|
×
|
friendly |
√
|
√
|
×
|
×
|
private |
√
|
×
|
×
|
×
|
总结
分享一些面试题,可供参考,未完结,还在更新中