草庐IT

task-switching

全部标签

java - Java 的 switch 在底层是如何工作的?

Java的switch语句在底层是如何工作的?它如何将正在使用的变量的值与案例部分中给出的值进行比较?它是使用==还是.equals(),还是完全是别的东西?我主要对1.7之前的版本感兴趣。 最佳答案 两者都没有。它使用lookupswitchJVM指令,本质上是一个查表。看一下下面例子的字节码:publicstaticvoidmain(String...args){switch(1){case1:break;case2:break;}}publicstaticvoidmain(java.lang.String[]);Code:St

java - 效率 : switch statements over if statements

PMD告诉我Aswitchwithlessthan3branchesisinefficient,useaifstatementinstead.这是为什么呢?为什么是3?他们如何定义效率? 最佳答案 因为switch语句是用两个特殊的JVM指令编译的,即lookupswitch和tableswitch。它们在处理大量案例时很有用,但当您只有几个分支时它们会导致开销。if/else语句反而被编译成典型的jejne...链更快,但使用时需要更多比较在一长串的分支中。您可以通过查看字节码来看到差异,无论如何我不会担心这些问题,如果有任何问题

java - 为什么 Java 12 会尝试将 switch 的结果转换为数字?

我同意此代码:vary=switch(0){case0->'0';case1->0.0F;case2->2L;case3->true;default->4;};System.out.println(y);System.out.println(((Object)y).getClass().getName());返回这个:0java.lang.Character但如果你删除boolean值:vary=switch(0){case0->'0';case1->0.0F;case2->2L;default->4;};System.out.println(y);System.out.println

java - Android Studio 转换异常 : Error:Execution failed for task ':app:transformClassesWithDexForDebug'

当我尝试使用AndroidStudio运行应用程序时出现以下异常:Error:Executionfailedfortask':app:transformClassesWithDexForDebug'.com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process'command'C:\ProgramFiles\Java\jdk1.8.0_05\bin\ja

java - 错误 :Execution failed for task ':app:packageRelease' . > 无法计算/../AndroidStudioProjects/../classes.jar 的哈希

我正在尝试在Android应用上进行“发布”构建,但我不断收到以下错误:Unabletocomputehashof/../AndroidStudioProjects/../classes.jar然后,当我查看“classes.jar”的目录时,该文件不存在。我是否必须使用gradle任务自己创建此文件?这里的proguard发生了一些事情,但除了“无法计算哈希......”之外,它没有提供太多有用的信息。这是我的gradle.build文件:applyplugin:'com.android.application'applyplugin:'com.google.gms.google-s

java - org.gradle.api.tasks.TaskExecutionException : Execution failed for task ':app:transformClassesWithDexForDebug'

由于我的项目中出现65K错误,我需要将其迁移到AndroidStudio。运行时./gradlewassembleDebug我收到错误:Executionfailedfortask':app:transformClassesWithDexForDebug'.com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.ide.common.proce

java - 在java中的switch case中使用字符串

在检查String时,我需要将以下if更改为switch-case,以提高圈复杂度。Stringvalue=somemethodx;if("apple".equals(value)){method1;}if("carrot".equals(value)){method2;}if("mango".equals(value)){method3;}if("orange".equals(value)){method4;}但我不确定我会得到什么值(value)。 最佳答案 Java(版本7之前)不支持在switch/case中使用String

java - switch 语句中的 String 如何比相应的 if-else 语句更有效?

Javadocumentation说TheJavacompilergeneratesgenerallymoreefficientbytecodefromswitchstatementsthatuseStringobjectsthanfromchainedif-then-elsestatements.AFAIKevenStringinswitch在内部以区分大小写的方式使用.equals()。那么在这种情况下,它们意味着什么效率。编译速度更快?更少的字节码?性能更好? 最佳答案 使用switch语句比equals更快(但仅在有多个字符

Java Switch 语句 - "or"/"and"可能吗?

我实现了一个字体系统,它通过charswitch语句找出要使用的字母。我的字体图像中只有大写字母。我需要做到这一点,例如,'a'和'A'都具有相同的输出。与其将案件数量增加2倍,不如说是以下内容:charc;switch(c){case'a'&'A':/*getthe'A'image*/;break;case'b'&'B':/*getthe'B'image*/;break;...case'z'&'Z':/*getthe'Z'image*/;break;}这在java中可能吗? 最佳答案 您可以通过省略break;语句来使用switc

java - IntelliJ : Generate switch case

真的没有办法在IntelliJ中为给定变量生成switchcase吗?Ctrl+Space和Ctrl+J不会产生任何结果。 最佳答案 对于枚举变量,输入switch(myEnumVar)并按Alt+Enter。智能补全会提示:创建缺失的“switch”分支CrazyCoder提供了以下屏幕截图,展示了如何启用CreateEnumSwitchBranches意图。见YouTrackissue6374. 关于java-IntelliJ:Generateswitchcase,我们在StackO