天天看点

Java核心知识点及面试-01

1、基本数据类型跟封装类型

  • 整型:​

    ​byte、int、short、long​

  • 浮点型:​

    ​float、double​

  • 字符型:​

    ​char​

  • 布尔型:​

    ​boolean​

    ​​
    Java核心知识点及面试-01
    Java核心知识点及面试-01

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​

​ ?并简述你的看法。