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 )Integerint的区别是什么。

Integer是封装类型,包含int基本类型的基本操作,int是基本类型

12 , -12

( 7 )floatfloat 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中的defaultbreak

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 ?并简述你的看法。

不建议使用!会破坏程序的结构,可读性变差