JAVA方法中的参数用final来修饰的效果

  很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改变的,但是如果修饰的是引用类型的变量,那么就需要注意了,引用类型变量所指的引用是不能够改变的,但是引用类型变量的值是可以改变的。

  如下面的代码:

  

package com.jd.test;

public class Test{
      public static void main(String hh[]){
      int i = 1;
      System.out.println(i);
      checkInt(i);
      System.out.println(i);
}

/**
 * 对于基本类型,基本类型的值在方法内部是不能够改变的
 * @param i
 */
public static void checkInt(final int i)
{

       //编译不通过,final修饰的局部变量i的值是不能够改变的
        //    i=10;

    }
}

对于引用类型的变量,请看下面的代码:

package com.jd.test;

import com.jd.domain.User;

/**
 *
 * final修饰参数的测试例子
 *
 * @author  [email protected]
 * @since    2015-10-8
 */
public class Test{
      public static void main(String hh[]){
      User user=new User();
      user.setId(1);
      user.setUserName("校长");
      user.setPassword("123456");
      checkInt(user);
}

/**
 * 对于基本类型,基本类型的值在方法内部是不能够改变的
 * @param i
 */
public static void checkInt(final User user)
{
      //user变量的引用是不能够改变的,否则的话,编译会报错
      //    user=new User();
      //user变量的值是能够修改的,但所指向的引用是不能够改变的
      user.setUserName("小王");

    }
}
时间: 2024-12-27 03:49:43

JAVA方法中的参数用final来修饰的效果的相关文章

Java 方法中,参数的装配顺序

从左到右依次装配,参数的值一旦确定,即使后面修改了该值,方法拿到的值也不会随之变化了. class Solution { public int a; @Override public String toString() { return "Solution{" + "a=" + a + '}'; } } public class Main{ static Solution max; static Solution change(){ max = new Soluti

关于java方法中Object... args参数的含义

关于java方法中Object... args参数的含义 在阅读google发布的volley源码时,突然看到一个方法中存在这样的写法,如 :v(String format, Object... args) 不明白什么意思,琢磨着为什么要这样写呢,跟Object[] args是一个意思吗?为什么用三个点代替呢?后来查阅了下文档,原来这是JDK1.5新增语法,新特性,动态参数或者是可变参数的意思. 举例: 有个方法v,调用v方法 v(里面写多少参数都行); 比如: v(1,"s"); v

java 对象的this使用 java方法中参数传递特性 方法的递归

一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或者构造器中  不存在成员变量与局部变量同名的情况,可直接不写this 否则方法中或构造器中使用的就是局部变量 3.static 静态方法不能调用this,不能调用任何非static修饰的成员变量 或者方法 二.java方法中  参数传递特性 1.基本数据类型--实际是新增变量,并赋值而已   不过代

Java方法的可变参数个数

什么是可变参数 可变参数,具体来说是, 1.传递参数的时候可以传递0个.1个.2个--n个. 2.也可以传递一个数组. 3.可变参数,必须是方法的最后一个参数. 示例 //业务逻辑类 /** * 根据 Workplandetailid获取任务对象 * * @param detailId * @return */ public Taskinfo findByWorkplandetailid(String detailId) throws Exception { StringBuffer strbu

转载:onCreate()方法中的参数Bundle savedInstanceState 的意义用法

Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是onCreate方法的参数saveInsanceState.一般的程序开发中,很少用到这个参数.       onCreate方法的完整定义如下:      public void onCreate(Bundle saveInsanceState){                super.onCreate(saveInsanceSt

Main方法中传入参数

↓ 这个时候会报错: Instantiate the class:DonutShop java.lang.ClassNotFoundException: DonutShop    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findCla

ajax 方法的使用以及方法中各参数的含义

由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数

33.C#--方法中ref参数的使用

static void Main(string[] args){//方法中ref参数的使用,不考虑实用性,只讲ref使用方法//用ref实现奖金+500double salary = 5000;JiangJin(ref salary); //传实参Console.WriteLine("这个月的总工资是:{0}", salary);Console.ReadKey(); } public static void JiangJin(ref double s) //ref有自动返回功能 { s

spring mvc中的控制器方法中的参数从哪里传进来?

编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢? 比如下面这样 @RequestMapping(value="/register", method=GET) public String showRegistrationForm(Model model) { model.addAttribute(new Spitter()); return "registerForm"; } 他怎么知道Model对应啥呢? 其实,spr