fianl属性 java_在Java中使用Final关键字可以提高性能吗?
是的可以。下面是一个最终可以提高性能的实例:
条件编译是一种技术,在这种技术中,代码行不会根据特定条件编译到类文件中。这可用于删除生产生成中的大量调试代码。
考虑以下几点:public class ConditionalCompile {
private final static boolean doSomething= false;
if (doSomething) {
// do first part.
}
if (doSomething) {
// do second part.
}
if (doSomething) {
// do third part.
}
if (doSomething) {
// do finalization part.
}}
通过将DoSomething属性转换为最终属性,您已经告诉编译器,每当它看到DoSomething时,它应该按照编译时替换规则用false替换它。编译器的第一次传递将代码更改为某物就像这样:public class ConditionalCompile {
private final static boolean doSomething= false;
if (false){
// do first part.
}
if (false){
// do second part.
}
if (false){
// do third part.
}
if (false){
// do finalization part.
}}
一旦完成,编译器将再次查看它,并看到代码中有一些不可访问的语句。由于您使用的是高质量的编译器,所以它不喜欢所有那些无法访问的字节码。所以它移除了它们,你就得到了这样的结果:public class ConditionalCompile {
private final static boolean doSomething= false;
public static void someMethodBetter( ) {
// do first part.
// do second part.
// do third part.
// do finalization part.
}}
从而减少了任何过多的代码,或任何不必要的有条件检查。
编辑:作为一个示例,让我们使用以下代码:public class Test {
public static final void main(String[] args) {
boolean x = false;
if (x) {
System.out.println("x");
}
final boolean y = false;
if (y) {
System.out.println("y");
}
if (false) {
System.out.println("z");
}
}}
在用Java 8编译此代码和用javap -c Test.class我们得到:public class Test {
public Test();
Code:
0: aload_0 1: invokespecial #8 // Method java/lang/Object."":()V
4: return
public static final void main(java.lang.String[]);
Code:
0: iconst_0 1: istore_1 2: iload_1 3: ifeq 14
6: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
9: ldc #22 // String x
11: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
14: iconst_0 15: istore_2 16: return}
我们可以注意到,编译后的代码只包含非最终变量。x..这表明最终变量对性能有影响,至少在这个简单的情况下是这样的。
fianl属性 java_在Java中使用Final关键字可以提高性能吗?相关推荐
- 在Java中使用final关键字可以提高性能吗?
本文翻译自:Does use of final keyword in Java improve the performance? In Java we see lots of places where ...
- java final 修改_“无法改变的设计”——浅谈Java中的final关键字
在Java中,final关键字可以用来修饰类.变量(包括成员变量和局部变量).方法,下面从这三个方面分别说明. final方法 当一个方法被final修饰时,表明这个方法不能被子类重写. 下面程序试图 ...
- 详解java中的final关键字
概述 final 简介 final关键字可用于多个场景,且在不同场景具有不同的作用.首先,final是一个非访问修饰符,仅适用于变量,方法或类.下面是使用final的不同场景: 上面这张图可以概括成: ...
- 浅谈Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 深入理解Java中的final关键字
深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...
- (转)深入理解Java中的final关键字
转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...
- 【转】浅析Java中的final关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- java final 变量 好处_深入理解Java中的final关键字
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
最新文章
- fiddler4 使用教程
- 浅谈群集与分布式基础知识
- rabbitmq 连接报错 An unexpected connection driver error occured(亲测)
- 学习OpenCV,看这些!
- php求平均值的函数_最全计算机二级函数关键知识点汇总整理!
- springboot幂等性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验
- 【图像融合】基于matlab CBF算法图像融合【含Matlab源码 083期】
- 好用的FTP下载工具 flashfxp工具
- IDEA配置方法类注释模板
- 项目实战第二十一讲:平台商品库
- java order()_Java Comparator naturalOrder()用法及代码示例
- lpx寒假作业案例15
- 第三方支付躺赚的好日子结束:银行直连模式瓦解
- 《机器人动力学与控制》第五章——速度运动学之机械臂的雅各比矩阵 5.0 导言
- pycharm社区版安装及使用教程(win10系统)
- 时光机与流浪者-我的2017
- 【原创】EXCEL公式经验(2)--关于count(),countif(),counta(),countifs()相关多个函数总结
- java ceil_Java使用Math.ceil舍入为一个int
- 【资源共享】好用的视觉软件Adaptive Vision Studio
- [每天读一点英文:那些给我勇气的句子] alone but not lonely
热门文章
- librtmp协议分析---RTMP_SendPacket函数
- SparkStreaming Exception in thread main java.lang.IllegalArgumentException xxx is not a valid
- 【PAT甲级 火星数字】1100 Mars Numbers (20 分)Java 全部AC
- C# 类的派生 输出个人信息
- netty系列之:自定义编码和解码器要注意的问题
- JDK的快速排序算法实现DualPivotQuicksort
- 3pc_three phase commit protocol协议理解
- 12.suggest_type
- leetcode--116. 填充每个节点的下一个右侧节点指针
- poj 1830 开关问题