Java核心知识点及面试-01
1、基本数据类型跟封装类型
- 整型:
byte、int、short、long
- 浮点型:
float、double
- 字符型:
char
- 布尔型:
boolean
1、基本类型与封装类型数据之间的转换valueOf()
public class StringtoNum { //主类名需要和文件名一致
//这是个main 函数
public static void main(String[] args)
//从数据库里取到的num 是String 类型
String num =”123”;
//通过Integer 封装类进行数据转换
int intVal = Integer.valueOf(num);
//通过Float 封装类进行数据转换
float fltVal = Float.valueOf(num);
//通过Long 封装类进行数据转换
long longVal = Long.valueOf(num);
//依次输出三个转换后的变量
System.out.println(intVal);
System.out.println(fltVal);
System.out.println(longVal);
2、i++
与++i
的使用建议
i++
是指表达式运算完后i
再加1++i
是指i
加上1后再运算表达式的值
为了提升代码的可读性,建议左加加和右加加操作不应(或尽量少)和他操作符混用,如果实在有必要,要分开写。
int i = 10;
int j = 10;
int k;
//k = i++ *3 不建议!!!++i也是一样
k = i * 3 ;
i ++;
3、三目运算代替if语句
表达式1 ?表达式2 : 表达式3;
语法:判断表达式1的返回值,如果是true 则执行表达式2 ,否则执行表达式3 。
int x = 1001;
String yhx = "nice";
if(x > 1000)
yhx = "good";
else
yhx = "nice";
//三目运算
x > 1000 ? yhx = "good": yhx = "nice";
4、==与equals
的区别
- 对于基本类型,== 比较值是否相等;对于封装类型,== 比较在内存中存在的地址是否相等。
- 对于封装类型,
equals
比较它们的值是否相等;
public class BasicGrammer {
public static void main(String[] args) {
boolean flags = true;
int i = 10;
int j = 10;
flags = (i == j) ? true : false;
System.out.println(flags); //true
Integer x = new Integer("10");
Integer y = new Integer("10");
System.out.println(x.equals(y)); //true
System.out.println(x == y); //false
}
}
5、常用面试题
( 1 )简述&和&&,以及|和||的区别。
答:& 和 |是位运算符,不常用;&& 和||是逻辑运算符,通常在if、while、for中使用。
( 2 )运行short s1 = 1, s1 = s1 + 1 ;会出现什么结果?运行short s1 = 1; s1 += 1 ;又会出现什么结果?
答:运行第一个会报错,因为1是
int
类型,而s是short
类型,通过+运算后s1自动转换成int
型。错误提示:Error:(21, 17) java: 不兼容的类型: 从int
转换到short
可能会有损失
运行第二个是正确的,s1=2,+1是int
类型的操作,s1自动转换int
类型
( 3 )用最高效率的方法算出2 乘以8 等于多少。
移位运算符:
int i = 2 << 3
;
( 4 ) “ == ”和equals 万法有什么区别
==在基本类型,比较值是否相等,在封装类型中比较内存中的地址
equals在封装类型中比较值是否相等,
( 5 )Integer
与int
的区别是什么。
Integer
是封装类型,包含int
基本类型的基本操作,int
是基本类型
12 , -12
( 7 )float
型float f = 3.4
是否正确?
No!!精度不正确,
float f = 3.4f
或者float f = (float)3.4
2、流程控制
1、if …else
以闰年为例
public class BasicGrammer {
public static void main(String[] args) {
int year = 2020;
if((year % 4 ==0 && year % 100 != 0) || (year % 400 == 0)){
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
注:在表达式不要多次使用逻辑表达式&&和||,如果需求很复杂,应分解多个if…else语句
2、避免短路效应
这里主要讲&&跟||在if语句中使用!
-
if(表达式1 && 表达式2)若表达式1为false,那么不管表达式2是true or false,都不会执行表达式2,if语句为false,就没有意义了
-
if(表达式1 || 表达式2)若表达式1为true,那么不管表达式2是true or false,都不会执行表达式2,if语句为true
public class BasicGrammer { public static void main(String[] args) { int a = 2 ; int b = 3 ; if(a > 0 || b-- > a ){ System.out.println(b); //b = 3 }if (a < 0 && ++b > 0){ }else { System.out.println(b); // b = 3 } } }
3、swtich
中的default
和break
public class BasicGrammer {
public static void main(String[] args) {
char grade = 'A';
switch (grade){
case 'A':{
System.out.println("1000");
break;
}
case 'B':{
System.out.println("8000");
break;
}
case 'C':{
System.out.println("600");
break;
}
case 'D':{
System.out.println("400");
break;
}
case 'E':{
System.out.println("200");
break;
} default:{
System.out.println("nice");
}
}
}
}
**对于每个case语句,都要加上break,若没有break,则输出就变了,没加break的case都会输出!!**如果不加break
,即使执行完本部台case 分支后,还会执行后继的分支语句。
不加default不会报错,但强烈加上!!!
4、常用面试题
( 1 ) switch 语句能否作用在byte 、long 、String 上?
- 可以用在
byte、int、short、char
以及它们的封装类上- 不能用在其他基本类型上
long、double、float、boolean
以及封装类- jdk1.7及以上,可以用以字符串
- 可以用于枚举类型
( 2 )在Java 中,如何跳出当前的多重嵌套循环。
break or continue ; break跳出整个循环;continue跳出当前循环。
( 3 ) while 和do while 有什么区别?
- while是先判断再执行;do…while是先执行再判断,同等条件下,后者多执行了一次。
( 4 )你有没有用过关键字goto
?并简述你的看法。
不建议使用!会破坏程序的结构,可读性变差
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了