精华内容
下载资源
问答
  • Java中switch是怎样支持String类型
    2021-05-09 15:35:45

    在Java7之前,switch只支持byte,short,int,char。从Java 7开始,Java中的switch也支持了String,这样在日常的编程中就可以很方便地使用switch对String进行判断,并执行不同的代码分支。
    那Java中的switch是怎样支持String的呢。我们结合程序例子和反编译代码来分析。

    • 支持String的switch代码片段
    public class SwitchTest {
    
        public void printAge(String name){
            switch (name){
                case "Alex":
                    System.out.println(20);
                    break;
                case "Ted":
                    System.out.println(23);
                    break;
                default:
                    System.out.println(25);
            }
        }
    }
    
    • 反编译后的代码片段
        public void printAge(String name) {
            byte var3 = -1;
            switch(name.hashCode()) {
            case 83955:
                if (name.equals("Ted")) {
                    var3 = 1;
                }
                break;
            case 2043454:
                if (name.equals("Alex")) {
                    var3 = 0;
                }
            }
    
            switch(var3) {
            case 0:
                System.out.println(20);
                break;
            case 1:
                System.out.println(23);
                break;
            default:
                System.out.println(25);
            }
    
        }
    

    可以看到在java中switch支持String实际上是通过hashcode和equals方法来实现的。在反编译后的代码片段中我们可以看到,先利用hashcode计算出String的hashCode,执行一次switch操作,把匹配到的分支信息保存在var3变量中。第一个switch代码块中用到了equals方法,主要的作用是为了防止hash冲突。

    第一段计算好了var3后,真正执行业务分支输出的在第二个switch代码片段中进行。从代码中可以看到,支持String的switch最终还是会被转换为int类型的方式来实现

    更多相关内容
  • 主要介绍了Java枚举类型在switch语句正确使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • java中switch()括号不能“long”,“float”,“double”,“boolean”类型的数据,可以使用“byte”,“short”,“char”,“int”,“枚举类型”,“String”类型的数据。java语言中switch(x)语句括号的...

    java中switch()括号中不能放“long”,“float”,“double”,“boolean”类型的数据,可以使用“byte”,“short”,“char”,“int”,“枚举类型”,“String”类型的数据。

    740aa7ad9869a4fcd0fe71ec8d0521c4.png

    java语言中switch(x)语句括号中的表达式 x 的类型可以是哪些呢?

    百度了一下,现在就来详细记录一下:JDK 1.5以前:x 只能是byte, short, char, int

    JDK 1.5之后:x 的类型也可以是枚举类型啦!

    JDK 1.7之后:x 的类型又多了一个String类型~

    其实,x 准确的说,数值型的只可以是 int 类型,但是 byte, short, char 都可以自动转换成 int 类型,所以 x 也可以是byte, short, char。当然了,对应的包装类也是可以自动转换,所以 x 也可以是包装类型的。

    无论哪个版本的JDK,都是不支持 long,float,double,boolean 这个一定要注意!

    9c16e33173533b218ff4398e23944560.png

    展开全文
  • java中switch里面表达式的类型可以是string类型
                   

     

    格式如下:
    switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; }      从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; }      从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。

     

         (一)在java的1.7之后的jdk版本,java中的switch里面表达式的类型可以是string类型。(Jdk版本一定要1.7之后,1.5可能只能是int或者char类型的喔)

    代码如下:

    package test0428;


    import java.io.File;
    import java.util.Scanner;


    /*
     * java.io.file表示文件(目录)
     * file类只用于文件目录的访问,不能用于文件内容的访问
     * */
    public class testFile {
    //了解构造函数,alt+/查看帮助
    public static void main(String[] agrs){ 
    System.out.println("请选择");

    Scanner in =new Scanner(System.in);
    String str=in.next();
    switch(str){
    case "abc":
    System.out.println("abc");
    break;
    case "bcd":
    System.out.println("bcd");
    break;
    default :
    System.out.println("default");
    break;
     
    }
    }
    }

    运行结果如下:

     

    请选择
    abc
    abc

     

    (二)switch中的表达式是不可以是boolean类型的。如果想转换为Boolean类型,只能是转换成字符串后再 使用,如下代码:

     boolean flag1=true;
    switch(flag1+""){
    case "true":
    System.out.println("boolean类型的:true");
    break;
    case "false":
    System.out.println("boolean类型的:flase");
    break;
    default :
    System.out.println("default");
    break;  
    }

     

               
    展开全文
  • JAVA中switch

    2022-01-17 11:33:28
    switch 语句的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开 始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面 量。 switch 语句可以拥有多个 case 语句。每个 case...

    switch case 语句有如下规则:

    switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开 始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面 量。

    switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

    case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字 面常量。

    当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

    当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

    switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分 支(可以在任何位置,但一般在最后一个)。default 在没有 case 语句的值和变 量值相等的时候执行。default 分支不需要 break 语句。(如果case语句中没有break 语句,程序会一直执行到default 分支)

    一、switch 介绍

    switch 语法格式:

     switch (表达式) {
            case 常量表达式或枚举常量:
                语句;
                break;
            case 常量表达式或枚举常量:
                语句;
                break;
            ......
            default: 语句;
                break;
        }
    复制代码

    switch 匹配的表达式可以是:

    • byte、short、char、int类型及 这4种类型的包装类型;
    • 枚举类型;
    • String 类型;

    case 匹配的表达式可以是:

    • 常量表达式;
    • 枚举常量;

    注意一点: case提供了switch表达式的入口地址,一旦switch表达式与某个case分支匹配,则从该分支的语句开始执行,一直执行下去,即其后的所有case分支的语句也会被执行,直到遇到break语句。

    public static void main(String[] args) {
            String  s = "a";
            
            switch (s) {
            case "a": //a分支
                 System.out.println("匹配成功1");
                    
            case "b": //b分支
                    System.out.println("匹配成功2");
                    
            case "c": //c分支
                     System.out.println("匹配成功3");
                     break;
            case "d": //d分支
                     System.out.println("匹配成功4");
                     break;
            default:
                break;
            }
        }
    
    

    运行结果:

    匹配成功1 匹配成功2 匹配成功3

    switch成功匹配了a分支,但a、b分支都没有 break 语句,所以一直执行a分支后的所有语句,直到遇到c分支的break语句才终止。

    他与下方的结果是不一样的:

    package test;
    
    public class SwitchTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String a = "c";
    		switch (a) {
    		case "a":
    			System.out.println("匹配成功a");
    			//break;
    		case "b":
    			System.out.println("匹配成功b");
    			//break;
    		case "c":
    			System.out.println("匹配成功c");
    			break;
    		default:
    			System.out.println("hhhh");
    			break;
    		}
    
    	}
    
    }

    在最后一个case中才判断正确,则前面case中的内容都不会被输出 

     

     

    Java中switch和if语句的区别

    switch和if语句都是Java的选择语句,这两种语句都是允许在程序运行时控制程序的执行过程。

    switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。 

    编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询。 
     
    相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。
      
    switch效率高,从汇编代码可以看出来。switch只计算一次值,然后都是test。
      
    switch的效率与分支数无关。当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)。分支比较多,那当然是使用switch。

     

    11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
    答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

    展开全文
  • 展开全部java中switch选择结构可以使用数据类型的数据:1, int2,char3,byte4,short5,枚举6, String:PS:对JDK版本有要求,必须为e5a48de588b662616964757a686964616f313333663065311.7及以上版本代码示例:...
  • Java中switch可以支持哪些数据类型

    万次阅读 2018-09-02 10:30:35
    JDK1.5 在switch循环增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为java编译器底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值. ...
  • 今天复习的时候,发现了一个一直忽略的问题,就是java语言中switch(x)语句括号的表达式 x 的类型可以是哪些呢?现在就来详细记录一下: JDK 1.5以前:x 只能是byte, short, char, int JDK 1.5之后:x 的类型也...
  • Java switch支持类型详解

    千次阅读 2021-01-27 19:49:04
    switch支持哪些类型? (1)最早时,只支持int、char、byte、short这样的整型的基本类型或对应的包装类型Integer、Character、Byte、Short常量,包装类型最终也会经过拆箱为基本类型,本质上还是只支持基本类型 (2...
  • byte,shor,int ,string ,char1.swtich()里面必须是int和enum--即枚举类型。2.short、 char 或者 byte他会自动转换为int的。。3.long不能自动转换为int,因为long比int范围大..可能会丢失精度..4.java把string也'...
  • java中switch语句 If your Java program needs to make a choice between two or three actions, an if, then, else statement will suffice. However, the if, then, else statement begins to feel cumbersome ...
  • JDK1.6的版本switch后面的括号里面只能int类型的值,注意是只能int类型,但是byte,short,char类型的也可以。是因为byte,short,shar可以自动提升(自动类型转换)为int。而不能long型和String型。而...
  • Java switch case数据类型原理解析这篇文章主要介绍了Java switch case数据类型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Java switch case ...
  • I need to change the following if's to a switch-case while checking for a String, to improve the cyclomatic complexity.String value = some methodx;if ("apple".equals(value)) {method1;}if ("carrot".equ...
  • 很多人也许会尝试写下这样的代码:ResultStructureEnum type = ResultStructureEnum...switch (type) {case ResultStructureEnum.STUDENT:...break;case ResultStructureEnum.TEACHER:...break;case ResultStructure...
  • switch可以用来判断java中的字符串源代码:package com.HePing.sturct;import java.util.Scanner;public class Switch_Demo02 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);...
  • 交换机在JAVA中不能使用long的根本原因是长时间转换为int将失去精度,导致数据不准确,因此JAVA交换机具有不允许长的逻辑规则。...扩展资料Switch案例在java中有以下规则:switch语句可以有多个case语句。每个案...
  • java中Switch语句的用法

    千次阅读 2020-09-08 19:47:47
    switch的常见用法如下: public String method(String variable){ switch (variable){ case "11": System.out.println("111"); break; case "22": ...1、switch后的变量可以是byte、s.
  • 最近学习Groovy,发现GroovySwitch case 比Java中Switch case强大,于是了解了Java中Switch case支持的数据类型是有限的,包int,char,String 和enum四种类型。 之前写android代码的时候,前面3经常...
  • java switch

    2021-03-08 01:31:23
    java switch[编辑]概述Java中switch是“开关”的意思,有时也被划分为一种“选择语句”。根据一个整数表达式的值,switch语句可从一系列代码选出一段执行。一.Java的简介Java是一种可以撰写跨平台应用软件的面向...
  • 项目出现了需要结合使用Switch和Enum的情况,按照平常思路编写代码后发现无法通过编译,如下列代码所示(只保留关键部分) 枚举类Constant代码如下 public enum Constant { //无关部分省略 SELECT("select"), ...
  • 开发java程序的过程,我们遇到了条件推断首选就是switch,可是java中switch功能不支持字符串作为条件。这时我们该怎么办呢? ——使用枚举。一、枚举简单了解1、enum是一种数据类型。特殊:是指枚举中将变量...
  • java中switch-case的使用

    千次阅读 2021-11-06 14:55:58
    switch-case选择结构由switch ,case, (break),(default)组成 其中,break后要加表达式 然后让表达式与下面几个case的情况匹配,匹配成功才会执行 下面是具体结构 switch(表达式){ case 常量1: 语句1...
  • Java中 if 、switch条件语句生活我们经常需要判断,然后决定是否要做某件事。例如:如果考试成绩大于 90 分,则奖励一个 笔记本电脑。对于这种“需要先判断条件,条件满足后才执行的情况”,就可以使用 if 条件语句...
  • java switch方法支持的数据类型 JDK1.5之前只支持byte,short,char,int四种数据类型。 2.JDK1.5的时候增加四种基本数据类型的封装类和枚举类型,Byte(byte),Short(short),Character(char),Integer(int)...
  • 在Java5以前,switch(expr),exper只能是byte,short,char,int类型 JDK1.6:引入enum JDK1.7时:又增加了String public static void main(String[] args) { switch ("123") { case "...
  • 专家解答实际编程过程,并不是所有的 if 条件语句都可以switch 分支语句代替。由于switch 语句的表达式只能测试 byte、short、int 或 char 类型的相等情况,而 if 语句可以计算任何类型的布尔表达式,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,081
精华内容 44,832
关键字:

在java中switch里面可以放的类型

java 订阅