0 0

局部方法的形参定义为final,是否会提升程序的性能?15

发现有个同事总喜欢将局部方法的参数全部定义为final的,如:
public static void debug(final Logger logger, final boolean enableCheck, final Object message, final Throwable t){}

在方法体中也并没有用到内部类。
我想问的是这样的写法对程序的性能是有有影响?如果有,有什么影响,为什么?
我只知道final修饰基本类型,会在编译器优化掉。

2个答案 按时间排序 按投票排序

0 0

采纳的答案

  final并不会给整个程序带来性能的提升,你同事这么做的目的可能只是为了防止别人随意修改参数的值。。。
  具体你可以问问你同事,这个可以沟通。。。

2012年12月24日 16:35
0 0


下面两份代码生成的字节码是完全相同的。

public class Test {
public void test(String aaa) {
}
}

public class Test {
public void test(final String aaa) {
}
}

~~~~~~~~~~~~~~~~~~~~~~~~
如果不存在内部类的话,局部变量(或者参数)上修饰的final只是在
编译期有效。字节码是不包含此信息的,所以和运行效率一点关系也没。

对于编译期的影响,final用来限制对变量的再次赋值。
这可能是一种编程习惯---一般总是保持函数入口参数不变。
另外,对阅读代码的人,可能会清晰一点。
(其实也未必,现在的IDE工具,都有标识符高亮的功能,想看到哪个变量
都用于什么地方了,高亮后,被使用的地方就一目了然了)

2012年12月25日 08:57

相关推荐

    【Java语言基础】final关键字

    final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,...

    Java中的final关键字

    - Java虚拟机(JVM)可以对`final`字段进行优化,例如静态`final`字段会被内联,提高运行时性能。 - 对于对象引用,`final`关键字并不保证对象内的状态不可变,仅保证引用本身不变。因此,对于复杂对象,如果需要...

    java面向对象之final修饰符.docx

    【Java面向对象之final修饰符】 Java中的final关键字在面向对象编程中扮演着重要的角色,它主要用于修饰类、变量和方法,...在实际开发中,合理使用final可以提高代码的清晰度,减少错误,并有助于提升程序的性能。

    北邮高级语言程序设计第三次阶段作业.pdf

    - 方法内部定义的变量是局部变量,只在方法内部可见。 9. 访问控制修饰符 - `private`成员只能在类内部访问。 - `protected`成员在同一包内的类和子类中可见。 - `public`成员在任何地方都可见。 10. main方法...

    程序设计4PPT课件.pptx

    4. **final局部变量**:在方法内部,如果定义为`final`,则不能在该方法内重新赋值。对于方法参数,使用`final`限制修改其值。 **全局常量**:`public static final`共同标记的变量是全局常量,可在整个应用中访问...

    北邮高级语言程序设计(基于Java)第三次阶段作业.docx

    8. **方法的形参**:方法的形参是可以没有的,可以定义0个或多个参数。 9. **方法内的变量**:方法内的变量是局部变量,只在方法内部可见,不能在方法外部访问。 10. **访问控制修饰符**:在类外部,只能访问声明...

    【04-面向对象(上)】

    局部变量指的是在一个方法内定义的变量。 •不管是成员变量还是局部变量都遵守相同的命名规则。 •成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变 了类...

    全网最全Java基础错题整理(持续更新)

    本文将对 Java 基础知识点进行总结,涵盖了 Java 的基本数据类型、方法参数、局部变量、实参和形参等概念。 一、基本数据类型 Java 语言提供了八种基本数据类型:byte、short、int、long、float、double、boolean ...

    【05-面向对象(下)】

    仅为该类的属性提供getter方法,不要为该类的属性提供setter方法,因为普通方法无法修改final修饰的 属性  –4.如有必要,重写Object类中hashCode 和equals •缓存实例的不可变类:如果程序经常需要使用不可变类...

    良心出品Java简答题参考题型.doc

    特点是在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。 Java中对象类型的参数传递是值传递的,即当一个实例对象作为参数被传递到方法中时,参数的值就是该对象...

    类与对象(练习题).docx

    1. **方法内的变量**:方法内定义的变量(局部变量)只在该方法内部可见,不能在方法外部使用。因此,选项B是正确的。 2. **方法的形参**:方法的形参可以没有,也可以定义多个。选项A是正确的。 3. **return语句*...

    《Java程序设计》练习题.docx

    10. **接口(Interface)**:接口是完全抽象的,包含常量(默认为public static final)和抽象方法(默认为public abstract)。接口不能实例化,也不能定义常量,但可以包含default方法。 11. **形参与属性**:方法...

    java 中的static关键字和final关键字的不同之处

    6. 形参的`final`:将方法的形参声明为`final`意味着在方法内部不能改变形参的值,这有助于明确方法不会修改传入的参数。 总之,`static`关键字用于定义与类相关而非与对象相关的属性和行为,而`final`关键字则用于...

    Java面向对象思维导图.pdf

    * 代码块:局部变量声明在方法体、方法的形参、内部类、代码块、构造器中 * 内部类:局部变量声明在内部类中 八、接口 * 属性的声明格式:public static final 数据类型 变量名(XXYY) = 初始化值; * 方法的声明...

    面向对象专题练习.docx

    - 在给出的程序示例中,由于`method`方法的重载规则,程序会调用接受`int`参数的方法,因此输出结果为“int:8”。 6. **类及其成员的修饰符**: - `protected`和`public`是可以用来修饰类及其成员的有效关键字。`...

    java习题集4java习题集4.doc

    6. C 重载就是一个类中有多个同名但有不同形参(类型、参数个数或参数顺序)和方法体的方法 7. D. public int addValue( int a, int b ) { return a+b+l; } 8. C. public int addValue( int a ){return a+1;} 以上...

    Java final 修饰符知识点总结(必看篇)

    需要注意,如果`final`方法同时被`private`修饰,那么子类将无法直接继承这个方法,因此在子类中定义同名方法不会构成重写,而是创建了一个新的方法。 ```java public class B extends A { public static void ...

    java工程师面试总结.pdf

    * 如果在定义final变量时没有指定初始值,则可以在后面代码中进行对final变量赋初始值,但只能一次,不能重复赋值。 * 如果final修饰的局部变量在定义时已经指定默认值,则后面的代码中不能再对该变量赋值。 final...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    ,所以通过给出不同个数或类型的参数会分别调用不同的构造方法。 例子:以类 Rectangle 为例,我们生成类 Rectangle 的对象: Rectangle p1=new Rectangle (); Rectangle p2=new Rectangle (30,40); 这里,我们...

Global site tag (gtag.js) - Google Analytics