详解JAVA字符串类型switch的底层原理

Java中switch语句详解及示例代码 总结一下,switch语句是Java中一种用于根据不同条件执行不同代码块的流程控制语句。它通过匹配表达式的值与各个case的值来确定要执行的代码块,并使用break语句来终止当前case的执行。如果没有匹配的case,可以使用default语句来执行默认的代码块。在Java中,switch语句是一种用于根据不同的条件执行不同代码块的流程控制语句。语句,程序将继续执行下一个case的代码块,这可能导致意外的行为。的值选择相应的case,并执行相应的数学运算。的值,switch语句将选择相应的case来设置。 阅读详情

基础

我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。

我们先来看一下int的一个简单例子,主要部分源代码

public static void main(String [] args){
        int n = 2;
        switch (n){
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            default:
        }
}

再使用javac命令编译,javap命令反编译之后得到如下关键部分字节码:

         0: iconst_2
         1: istore_1
         2: iload_1
         3: tableswitch   { // 1 to 3

                       1: 28

                       2: 31

                       3: 34
                 default: 37
            }
        28: goto          37
        31: goto          37
        34: goto          37
        37: return

看不懂的话可以 点击这里 查看参考对照表。
当然懒得看的话我们也可以直接把class文件反编译成源代码,可以直接将class文件拖进IDEA,得到如下代码:

    public static void main(String[] var0) {
        byte var1 = 2;
        switch(var1) {
        case 1:
        case 2:
        case 3:
        default:
        }
    }

这里总的来说和源代码变化不大,只是将int类型都转化为了byte类型。这里转化的原因,在于我们最初的case里面的值刚好在byte的范围之内。如果case的值稍微大点,它可能就会转化为short类型,再大点,就直接是int类型了。需要注意的是switch里面不支持float、long这些类型。

String类型讲解

有了上文的理解之后,下面应该会简单许多。
同样的,还是先上源代码

	
public static void main(String [] args){
        String str = "sdf";
        switch (str){
            case "aaa":
                break;
            case "ccc":
                break;
            case "bbb":
                break;
            default:
        }
}

然后编译之后丢进IDEA反编译得到反编译的代码

    public static void main(String[] var0) {
        String var1 = "sdf";
        byte var3 = -1;
        switch(var1.hashCode()) {
        case 96321:
            if (var1.equals("aaa")) {
                var3 = 0;
            }
            break;
        case 97314:
            if (var1.equals("bbb")) {
                var3 = 2;
            }
            break;
        case 98307:
            if (var1.equals("ccc")) {
                var3 = 1;
            }
        }

        switch(var3) {
        case 1:
        case 0:
        case 2:
        default:
        }
    }

可以看到,String类型的switch,转换为了字符串的哈希比较,而其哈希返回的正是int类型。hash相同的情况再通过equals方法对比字符串的值,因此引进局部变量var3,是很有必要的。

JAVA字符串类型switch的底层原理详析 主要给大家介绍了关于JAVA字符串类型switch的底层原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JAVA具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 立即下载

相关推荐

【UE5】三步搞定Pixel Streaming:从零搭建Windows像素流服务

本文详细介绍了如何在Windows平台上快速搭建UE5 Pixel Streaming像素流服务,从插件安装、项目打包到服务启动的全流程操作。通过实战案例和优化配置,帮助开发者实现零客户端配置、跨设备兼容的高性能3D应用流式传输,特别适合建筑可视化和实时协作场景。

weixin_29000991的博客 318

Java流程控制之Switch多选择结构,理论+源码

大家好,我来分享一下Java流程控制当中的Switch多选择结构 看我之前的博客,你就会知道,之前的if 判断处理的是区间的问题, 而我们今天要讲的Switch多选择结构处理的是等量的问题 这是Switch语法: 下面直接写实例 package struct; public class SwitchDemo01 { public static void main(String[] args) { //case 穿透 匹配一个具体的值 char gr...

weixin_47556601的博客 504

cmu15445(2024fall) project 2

project 2比p1难度要更大,代码量更大且涉及的知识更多,实现中出现的bug更多,好在是最后全部解决了。我最大的收获在于对于多线程编程的理解更深入了,实际发现解决了多个多线程相关的bug,学会了更多多线程下debug的技巧方法,也见识了更多多线程的bug情况。在之后可以更系统的学习一下多线程编程。同时学会实现B+树也是需要掌握的基础。

Jerome_Yi的博客 1559

深入解析 Java 的 switch 语句

switch语句适用于对单个变量的多个可能值进行判断,代码更加简洁和清晰。使用break语句可以避免“穿透”问题。Java 12 引入的switch表达式使得switch语句更加简洁和功能强大。yield关键字在 Java 13 中被引入,用于从switch表达式的分支中返回值,使得代码更加灵活。理解并解决常见问题,可以更有效地使用switch语句。通过本文的详细介绍,希望你对 Java 的switch语句有了更深入的了解,能够在实际编程中灵活运用这一强大的控制流语句。

微笑听雨 8136

西门子PLC1200与CB1241模块的Modbus RTU从站配置全流程(附串口调试技巧)

本文详细介绍了西门子S7-1200 PLC与CB1241通信模块实现Modbus RTU从站配置的全流程,包括硬件接线规范、TIA Portal工程组态、通信指令编程及串口调试技巧。通过实战案例和常见错误处理方案,帮助工程师快速搭建稳定的工业通信系统,提升自动化设备的互联互通能力。

weixin_29165725的博客 325

如何运用好DeepSeek为自己服务:智能增强的范式革命 || 目录

1.1 认知增强的三次浪潮1.2 DeepSeek认知增强模型1.3 人机认知耦合协议1.4 认知增强的数学基础。

𝓓𝓸𝓶𝓲𝓷𝓪𝓽𝓲𝓷𝓰 𝓐𝓵𝓵 𝓣𝓱𝓲𝓷𝓰𝓼 1220

Java switch使用

Java switch使用

weixin_44326073的博客 1443

传输线末端短路、开路、加电感的反射系数

时,频率变化约300MHz, 出现这种偏差是因为我们的计算中将电磁波传播速率默认为。时,频率变化约300MHz, 出现这种偏差是因为我们的计算中将电磁波传播速率默认为。下图为用网络分析仪实测一长度为30cm的传输线末端加一0.6uH的线圈的反射系数。下图为用网络分析仪实测一末端短路的长度为30cm的传输线的反射系数。下图为用网络分析仪实测一末端开路的长度为30cm的传输线的反射系数。末端加电感相当于在传输线末端延长了一段后末端短路,使得相位下降速率。幅度为0dB, 相位由。幅度为0dB, 相位由。

johnboat的专栏 1873

[Java基础]JAVA的SWITCH语句(String)

switch 语句相当于 if else的另一种表达方式 switch 控制表达式支持的类型有byte、short、char、int、enum(Java 5)、String(Java 7)。 注:每个表达式结束,都应该有一个break;注:String在Java1.7之前是不支持的, Java从1.7开始支持switch用String的,编译后是把String转化为hash值,其实还是整数 1、switch支持String,实际上是通过java语法...

q306507291的博客 7323

【每天一个知识点】多视图子空间聚类(Multi-view Subspace Clustering)

本文深入解析了多视图子空间聚类技术,这是一种处理多源异构数据的先进方法。它通过融合多个数据视图(如文本、图像、网络结构)的共识与互补信息,学习统一的潜在子空间表示,从而获得比单一视图更鲁棒、准确的聚类结果。文章详细阐述了其核心思想、主流技术流派(如图融合、共同潜在子空间、张量及深度学习方法),并提供了Python实战代码与调优经验,适用于跨模态检索、生物信息学等多领域复杂数据分析。

weixin_29065015的博客 459

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 333

详解:Java字符串类型"switch"的底层原理

前言: 最近更新得会比较频繁,希望大家见谅哦! 也感谢关注我的人,我会更加更加努力去做的! 基础 我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。 我们先来看一下int的一个简单例子,主要部分...

sevencuecue的博客 837

解决anaconda占用C盘空间过多问题

anaconda就算安装在其他盘,默认会把索引、锁定文件、压缩包等都放到系统盘(C盘),我用了两年,占用30GB。 1. 卸载不用的虚拟环境 查看已安装的虚拟环境 conda env list 卸载不用的、过期的虚拟环境 conda remove -n (要卸载的环境的名字) --all 2. 删除索引缓存、锁定文件、未使用过的包和tar包 conda clean -a 清理完之后,删除了15GB,还剩15GB,舒服了 ...

沉迷单车的追风少年 3万+

java字符串switch_详解JAVA字符串类型switch的底层原理

基础我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。我们先来看一下int的一个简单例子,主要部分源代码public static void main(String [] args){int n = 2;sw...

weixin_36211536的博客 405

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java字符串switch_详解:Java字符串类型"switch"的底层原理

前言:最近更新得会比较频繁,希望大家见谅哦!也感谢关注我的人,我会更加更加努力去做的!基础我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。我们先来看一下int的一个简单例子,主要部分源代码public st...

weixin_33796288的博客 916

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

switch 字符串_详解:Java字符串类型"switch"的底层原理

前言:最近更新得会比较频繁,希望大家见谅哦!也感谢关注我的人,我会更加更加努力去做的!基础我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。我们先来看一下int的一个简单例子,主要部分源代码public st...

weixin_39775127的博客 273

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

switch 字符串_详解:Java字符串类型"switch"的底层原理

前言:最近更新得会比较频繁,希望大家见谅哦!也感谢关注我的人,我会更加更加努力去做的!基础我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。我们先来看一下int的一个简单例子,主要部分源代码public st...

weixin_28791139的博客 284

class反编译成java_详解:Java字符串类型"switch"的底层原理

前言:最近更新得会比较频繁,希望大家见谅哦!也感谢关注我的人,我会更加更加努力去做的!基础我们现在使用的Java的版本,基本上是都支持String类型的。当然除了String类型,还有int、char、byte、short、enum等等也都是支持的。然而在其底部实现中,还是基于 整型的,也就是int、byte、short这些类型。我们先来看一下int的一个简单例子,主要部分源代码public st...

weixin_39914863的博客 185

【无标题】Java switch 语句支持哪些类型,原理

switch的核心是「整数映射跳转表」,因此仅支持能转换为整数且精确匹配的类型。

weixin_64128427的博客 947

java字符串原理_JAVA字符串类型switch的底层原理详析

JAVA字符串类型switch的底层原理详析发布于 2020-4-24|复制链接摘记: 前言switch 语句是非常的基础的知识,掌握起来也不难掌握,语法比较简单。但大部分人基本是知其然,不知其所以然。譬如 早期JDK只允许switch的表达式的值 int及int类型以下的基本类型,后期的JDK却允许匹配比较 字符串、枚举类型,这是怎么做到的呢?原理是什么?本文将深入去探索。基础我们现在使用的Ja...

weixin_39914499的博客 148

Java switch支持类型详解

switch支持哪些类型? (1)最早时,只支持int、char、byte、short这样的整型的基本类型或对应的包装类型Integer、Character、Byte、Short常量,包装类型最终也会经过拆箱为基本类型,本质上还是只支持基本类型 (2)JDK1.5开始支持enum,原理是给枚举值进行了内部的编号,进行编号和枚举值的映射 (3)1.7开始支持String,但不允许为null,原理是借助 hashcode( ) 来实现。 我们首先看下Jdk的官方文档。官方文档中对于switch有如下描述。

码农笔记 4860

Java 中的 switch 语句:类型支持与限制

在 Java 中,switch 语句是一种用于多分支选择的控制结构。从 Java 1.0 开始,switch 语句就支持了基本数据类型,而随着时间的推移,Java 不断扩展了 switch 语句的功能,支持了更多的数据类型。下面,我们来详细探讨一下 switch 语句在 Java 中的类型支持与限制。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

switch判断的底层原理

本节主要讲解Java的switch判断的底层原理,分为整数类型和字符串类型来讲解。

yjp1240201821的博客 783

Java面试-switch 语句支持哪些类型?原理是什么?

switch👋 欢迎阅读《Java面试200问》系列博客!🚀大家好,我是Jinkxs,一名热爱Java、深耕技术一线的开发者。在准备和参与了数十场Java面试后,我深知面试不仅是对知识的考察,更是对理解深度与表达能力的综合检验。✨本系列将带你系统梳理Java核心技术中的高频面试题,从源码原理到实际应用,从常见陷阱到大厂真题,每一篇文章都力求深入浅出、图文并茂,帮助你在求职路上少走弯路,稳拿Offer!🔍今天我们要聊的是:《准备好了吗?Let’s go!

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: LeetCode - 字符串数字相乘与相加
下一篇: 一款功能强大的TCP/UDP工具---flynet
Asche910
博客等级 码龄11年 65粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值