-
局部方法的形参定义为final,是否会提升程序的性能?15
发现有个同事总喜欢将局部方法的参数全部定义为final的,如:public static void debug(final Logger logger, final boolean enableCheck, final Object message, final Throwable t){}
在方法体中也并没有用到内部类。
我想问的是这样的写法对程序的性能是有有影响?如果有,有什么影响,为什么?
我只知道final修饰基本类型,会在编译器优化掉。2012年12月24日 16:28
2个答案 按时间排序 按投票排序
-
采纳的答案
final并不会给整个程序带来性能的提升,你同事这么做的目的可能只是为了防止别人随意修改参数的值。。。
具体你可以问问你同事,这个可以沟通。。。2012年12月24日 16:35
-
下面两份代码生成的字节码是完全相同的。
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
相关推荐
final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,...
- Java虚拟机(JVM)可以对`final`字段进行优化,例如静态`final`字段会被内联,提高运行时性能。 - 对于对象引用,`final`关键字并不保证对象内的状态不可变,仅保证引用本身不变。因此,对于复杂对象,如果需要...
【Java面向对象之final修饰符】 Java中的final关键字在面向对象编程中扮演着重要的角色,它主要用于修饰类、变量和方法,...在实际开发中,合理使用final可以提高代码的清晰度,减少错误,并有助于提升程序的性能。
- 方法内部定义的变量是局部变量,只在方法内部可见。 9. 访问控制修饰符 - `private`成员只能在类内部访问。 - `protected`成员在同一包内的类和子类中可见。 - `public`成员在任何地方都可见。 10. main方法...
4. **final局部变量**:在方法内部,如果定义为`final`,则不能在该方法内重新赋值。对于方法参数,使用`final`限制修改其值。 **全局常量**:`public static final`共同标记的变量是全局常量,可在整个应用中访问...
8. **方法的形参**:方法的形参是可以没有的,可以定义0个或多个参数。 9. **方法内的变量**:方法内的变量是局部变量,只在方法内部可见,不能在方法外部访问。 10. **访问控制修饰符**:在类外部,只能访问声明...
局部变量指的是在一个方法内定义的变量。 •不管是成员变量还是局部变量都遵守相同的命名规则。 •成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变 了类...
本文将对 Java 基础知识点进行总结,涵盖了 Java 的基本数据类型、方法参数、局部变量、实参和形参等概念。 一、基本数据类型 Java 语言提供了八种基本数据类型:byte、short、int、long、float、double、boolean ...
仅为该类的属性提供getter方法,不要为该类的属性提供setter方法,因为普通方法无法修改final修饰的 属性 –4.如有必要,重写Object类中hashCode 和equals •缓存实例的不可变类:如果程序经常需要使用不可变类...
特点是在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。 Java中对象类型的参数传递是值传递的,即当一个实例对象作为参数被传递到方法中时,参数的值就是该对象...
1. **方法内的变量**:方法内定义的变量(局部变量)只在该方法内部可见,不能在方法外部使用。因此,选项B是正确的。 2. **方法的形参**:方法的形参可以没有,也可以定义多个。选项A是正确的。 3. **return语句*...
10. **接口(Interface)**:接口是完全抽象的,包含常量(默认为public static final)和抽象方法(默认为public abstract)。接口不能实例化,也不能定义常量,但可以包含default方法。 11. **形参与属性**:方法...
6. 形参的`final`:将方法的形参声明为`final`意味着在方法内部不能改变形参的值,这有助于明确方法不会修改传入的参数。 总之,`static`关键字用于定义与类相关而非与对象相关的属性和行为,而`final`关键字则用于...
* 代码块:局部变量声明在方法体、方法的形参、内部类、代码块、构造器中 * 内部类:局部变量声明在内部类中 八、接口 * 属性的声明格式:public static final 数据类型 变量名(XXYY) = 初始化值; * 方法的声明...
- 在给出的程序示例中,由于`method`方法的重载规则,程序会调用接受`int`参数的方法,因此输出结果为“int:8”。 6. **类及其成员的修饰符**: - `protected`和`public`是可以用来修饰类及其成员的有效关键字。`...
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;} 以上...
需要注意,如果`final`方法同时被`private`修饰,那么子类将无法直接继承这个方法,因此在子类中定义同名方法不会构成重写,而是创建了一个新的方法。 ```java public class B extends A { public static void ...
* 如果在定义final变量时没有指定初始值,则可以在后面代码中进行对final变量赋初始值,但只能一次,不能重复赋值。 * 如果final修饰的局部变量在定义时已经指定默认值,则后面的代码中不能再对该变量赋值。 final...
,所以通过给出不同个数或类型的参数会分别调用不同的构造方法。 例子:以类 Rectangle 为例,我们生成类 Rectangle 的对象: Rectangle p1=new Rectangle (); Rectangle p2=new Rectangle (30,40); 这里,我们...