两个小时摆脱Java小白--java编程基础(4)Java 7 switch支持String的实现原理


摘要

很长时间没有更新了,跟大家说声对不起,(我是不是不配拥有你们),得发点福利吧,现在已经2020年了首先呢,祝大家新年快乐! 上一期呢我们学的是分支语句里的if else  else if ,今天呢我们继续来学分支语句!

1、switch
switch它的中文意思呢? 有开关的意思,选择的意思,分支的意思。 switch语句呢他是用来做一些排比式的判断,看一下语法:

语法:

switch(表达式){

    case 取值1: 语句块1;

break;

    case 取值n: 语句块n;

break;

    default: 语句块n+1;

break;

}

switch语句有关规则

  • 表达式的返回值必须是下述几种类型之一: int, byte, char, short,确定的结果,jdk1.7后支持String;

  • case子句中的取值必须是常量,且所有case子句中的取值应是不同的;

  • default子句是可选的;

  • break语句用来在执行完一个case分支后使程序跳出switch语句块; 如果case后面没有写break则直接往下面执行!

  • case后面的执行体可写{ }也可以不写{ }


switch与if嵌套

switch(表达式){

    case 取值n: 语句块n;

    if(表达式){…}

        break;

    default: 语句块n+1;

        break;

}

练习题:

1、编写一程序实现如下功能: 输入1、2、3、4、5、6、7(分别对应星期一至星期日)中的任何一个数。

2、输入一个月数,然后输出对应月份有多少天(不考虑闰年),将天数输出。

3、直接用JDK1.7的字符串条件判断,确定两个数是执行加、减、乘、除操作。

练习题大家,一点要敲一敲,虽然很简单,但是多打打总是没有坏处的!

switch里可以嵌套if 也可以嵌套switch 都是可以的



然后说一下switch作用域的问题:

看这一段的代码

public class Test4{
	public static void main(String[] args){
		int a=2;
		switch(a){
			case 1:
				int i=0;
				System.out.println("i="+i);
			
			break;
			case 2:
				int i=1;
				System.out.println("i="+i);
			break;
			
		}
	}

}

这样写会有什么错呢?

报错,报的是int i已经定义了,不能重新定义了,如果代码改成下边的样子会不会报错呢 ?

public class Test4{
  public static void main(String[] args){
    int a=2;
    switch(a){
      case 1:
        int i=0;
        System.out.println("i="+i);
      break;
​
      case 2:
        i=1;
        System.out.println("i="+i);
      break;
​
    }
  }
​


i会不会输出出来呢? 下面就让我们看一下答案?


a 不是等于2吗? case 1: 这个分支不是没有执行吗,怎么会不报错呢? 这就和作用域有关系了,我们发现 int i=0,离它最近的一个大括号,是在switch后边,所以它在编译的时候,int i这个变量的作用域就是整个switch。 所以没有报错,case 里边是语句块,他可以加{}的,咱们加上试试:

public class Test4{
  public static void main(String[] args){
    int a=2;
    switch(a){
      case 1:{
        int i=0;
        System.out.println("i="+i);
      }
      break;
      case 2:
        i=1;
        System.out.println("i="+i);
      break;
​
    }
  }
​
}

运行后的 结果

报错的意思就是地11和12行的找不到这个变量,因为case里加了个大括号,所以int i=0; 它只在case里的大括号里能找到! 这也是个小坑吧! 工作和面试的时候大家注意点吧!

2、分支语句的比较:

if  vs  switch

相同点: 都是选择分支语句。

不同点:

  1. 语法不同。

  2. 语句后表达式值的类型不同,if语句表达式值的类型是boolean,swith分支表达式值的类型是byte,short,char,int,枚举,String。

  3. 适用场景
     if: 变量的值在某个区间之内。
    switch: 变量的值是某个定值。

Tip:

if分支判断的时候建议把,匹配率高的分支放在前边,这样会提高代码运行效率‘。

if判断时尽量使用确定值去跟不确定的值去判断

eg: int x=10;

if(15==x)

而不是 x==15,数值类型的时候这两个没啥区别,因为他有默认值,x默认=0,如果是引用类型的话,默认值有可能是个null,会出现最常见的空指针异常。 这样写的话会避免空指针异常


if vs 三目运算


三目运算符都可以使用if语句实现,反之不成立。


Java 7 switch支持String的实现原理:

这个新特性是在编译器这个层次上实现的,

java在运行的时候,分编译期和运行期,switch 编译之前是支持String的,编译后他就不支持String了,换了一种方式了。

在编译的过程中,编译器会根据源代码的含义进行转换 ,不同的Java编译器可能采用不同的方式来转换

比如: 如果switch语句中只包含一个case语句,那么就可以简单的将其转换成一个if语句。

如果包含一个case和一个default语句,就可以转换成if-else语句。 而对于复杂的情况(多个case语句), 也可以转换成Java 7 之前的switch语句,只不过使用字符串的哈希值(整数)作为switch语句表达式的值,哈希值是什么东西? 等学到了咱再说! 不要纠结!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值