一、前言常见面试题来自牛客网:https://www.nowcoder.com/tutorial/94/4206176d637541fa92c784a4f547e979
这个专栏是Java基础复习,将记录我准备大数据开发面试的过程,在校招面试中占了比较大的部分。希望自己现在夯实基础,笑着面对接下来的校招。那么现在开始行动起来吧!
二、常见题1. &和&&有什么区别,|和||又有什么相同和不同点?
相同点:&和&&都表示与的逻辑运算符,只有两边表达式都为真,结果才为真
||和|都表示或的逻辑运算符,只要一个表达式为真,结果就为真
不同点:&&和||还有”短路“作用,即当&&前面为假时,&&后面不运算,结果为假;当||前面为真时,||后面不运算,结果为真。
这里,给大家,举个例子,简单易懂的诠释了“短路”效果。
这就是所谓的“短路求值”:就是当参与运算的一个操作数(有可能是表达式)已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行
&:叫做按位与,
|叫做按位或,两者都是位运算符
当&、| 两边的表达式是int时,要先把运算符两侧的数转化为二进制数再进行运算
● &:按位与。当两位同时为1时才返回1。
● |:按位或。只要有一位为1就返回1
举例如下:
2. int和Integer有什么区别?
关于这个问题,我们就要复习一下Java中的数据类型知识了
(一)Java两种数据类型分类:
一、基本数据类型:有boolean,int,double,byte,char,short,long,float
二、引用数据类型:有数组、类、接口
(二)Java为每个基本数据类型提供了封装类
Java是面向对象的编程语言,为了能将这些基本数据类型当成对象操作,Java为每个基本数据类型提供了对应的包装类型,对应的包装类为:Boolean,Int,Double,Byte,Character,Short,Long,Float
int和Integer的不同点:
1.Integer是int的包装类,int是基本数据类型
2.Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值
3.Integer默认值是Null;int默认值是0
细节对比:
1.由于Integer变量实际是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远不相等(因为其内存地址不同)
2.Integer变量和int变量比较时,只要两个变量值相等,则结果为true(自动装箱和自动拆箱知识,下面会说)
这个又涉及到了另外一个知识:自动装箱与自动拆箱
自动装箱:将基本数据类型转化为对象
基本数据类型成为一个对象后,就可以调用对象所声明的所有方法
自动拆箱:将对象转化为基本数据类型
另外,还有一个重要的知识,我们来看这样一个问题
原因:Java在设计自动装箱和自动拆箱时,采用了亨元模式(一个工厂设计模式),从而加大对简单数字的重利用
当对于自动装箱时在-128-127之内的数值,Java把它们装箱后,存在内存中等待被重用,而不在范围的数则相当于每次装箱时都新建一个Integer对象,自然而然c和d就不会相等了
附上Integer类的静态方法valueOf的源码,感兴趣的伙伴可以看一下:(顺便提一句,学会看源码在工作中还是很重要的,所以大家努力学起来吧!)
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high) {
return IntegerCache.cache[i + (-IntegerCache.low)];
}
return new Integer(i);
}
三、结束
万事开头难,在复习的路上难免会有时候懈怠,希望正在阅读这篇文章的你,也可以向我一样追寻自己的梦想,加油,少年!



