广告
返回顶部
首页 > 资讯 > 后端开发 > Python >聊聊Java的switch为什么不支持long
  • 665
分享到

聊聊Java的switch为什么不支持long

2024-04-02 19:04:59 665人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录Java为什么不浪(long)疑问分析编程思想汇总switch能否作用于Long,string上Java为什么不浪(long) 学而时习之不亦说乎,继续温习Java。 今天使用s

Java为什么不浪(long)

学而时习之不亦说乎,继续温习Java。

今天使用switch时,不小心写了如下代码,报错如下。


 public static void main(String[] args) {
   long s = 20L;
   switch (s) {
   case 20L:
    System.out.println("haha");
    break;

   default:
    break;
   }
 }

疑问

1.为什么可以支持byte、char、short、int,不能支持long呢?

2.为什么可支持enum和String?注意enum是jdk5引入,switch支持String是JDK7支持

分析

1.为什么可以支持byte、char、short、int,不能支持long呢?

发现一个共同点,这些都是基础数据类型中的整数,并且最大不超过int。正好去研究一下官方文档说明。

Compilation of switch statements uses the tableswitch and lookupswitch instructions.
The tableswitch instruction is used when the cases of the switch can be efficiently represented as indices into a table of target offsets.
The default target of the switch is used if the value of the expression of the switch falls outside the range of valid indices.
The Java Virtual Machine's tableswitch and lookupswitch instructions operate only on int data. Because operations on byte, char, or short values are internally promoted to int, a switch whose expression evaluates to one of those types is compiled as though it evaluated to type int.

意思是说switch的编译会用到两个指令,tablesswitch和lookupswitch。而这2个指令指令只会运行在int指令下,低于int的正数类型会被转为int类型,而这一点和short、byte等类型在计算时会被转为int来处理的表现是一致的。

到此为止,我们知道第一个问题的答案了。在编译时,switch被编译成对应的2个实现方式的指令,这2种指令只支持int类型。

2.为什么可支持enum和String?

按照网络资料反编译对照来看,enum最终也是转换为enum的int序号来适应switch的。而String类型要怎么和int对应起来呢,有一种方式叫hashcode计算,最后可以得出一个数值,把这个控制在int范围内,就能适应switch的要求了。

编程思想汇总

1.类比switch支持enum和String的实现。

在程序开发中,由于第三方库或者工具类中方法参数限制,调用者必须对参数做一些转换才能调用这些方法的情况下,我们可以使用适配器模式来抹平这种差异。

2.类比switch在JDK版本在5时引入enum的支持,在7时引入对String支持。

在程序开发中,版本迭代是最常见也是能够很好权衡开发速度和质量的方式。类似一个App程序,我们花2年可以把它的bug数量降低到万分之一,但市场不会留给公司那么多时间。所以实际上每家公司都是会先开发出一个有基本功能特性的App,然后没2周或者一个月迭代一个版本,通过迭代把这个App完善好。

我们的代码开发大家一定注意,不追求尽善尽美。先让业务能够跑起来,然后我们再进一步追求性能、代码可读性达到90甚至98分的程度。

switch能否作用于Long,string上

switch原则上只能作用于int型上,

但是,char、float、char等可以隐式的转换为int 型,而long,string不可以,

所以呢,switch 不可以作用于Long, string 类型的变量上。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 聊聊Java的switch为什么不支持long

本文链接: https://www.lsjlt.com/news/137704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 聊聊Java的switch为什么不支持long
    目录Java为什么不浪(long)疑问分析编程思想汇总switch能否作用于Long,string上Java为什么不浪(long) 学而时习之不亦说乎,继续温习Java。 今天使用s...
    99+
    2022-11-12
  • Python为什么不支持switch语句
    一、简洁性和可读性 Python的设计哲学之一是代码的简洁性和可读性。引入”switch”语句可能会增加语言的复杂性,并且可以用其他方式更清晰地表达相同的逻辑。Python鼓励使用”if-elif-else”语句来处理多个条件情况,这种方式...
    99+
    2023-10-29
    不支持 语句 Python
  • 为什么Java不支持多继承
    这篇文章主要介绍“为什么Java不支持多继承”,在日常操作中,相信很多人在为什么Java不支持多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么Java不支持多继承”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-15
  • Python中不支持 switch 语句的原因是什么
    这期内容当中小编将会给大家带来有关Python中不支持 switch 语句的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、switch 是什么switch 的语法格式如下:switch(ex...
    99+
    2023-06-16
  • Java不支持多继承的原因是什么
    这篇文章主要介绍“Java不支持多继承的原因是什么”,在日常操作中,相信很多人在Java不支持多继承的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java不支持多继承的原因是什么”的疑惑有所帮助!...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作