很多人都说在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 zhanghao10@jd.com
* @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("小王"); }
}

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

  1. JAVA方法中的参数用final来修饰的原因

    JAVA方法中的参数用final来修饰的原因   很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的 ...

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

    一.this关键字,使用的情形,以及如何使用. 1.使用的情形 类中的方法体中使用this  --初始化该对象 类的构造器中使用this --引用,调用该方法的对象 2.不写this,调用 只要方法或 ...

  3. java方法中参数传递与随机点名器、库存管理案例

    一 参数传递 1.定义: 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数, 这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我 们称 ...

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

    由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...

  5. C# 方法中的参数类型

    二.方法中的参数类型 1. 值参数 值参数是指不带修饰符只带数据类型的形参. 值参数在使用值向方法传递参数时,编译程序会把实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的 ...

  6. ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解

    转自 ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解   ArcGIS Engine中总调用IFeatureCla ...

  7. JAVA方法中参数到底是值传递还是引用传递

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是值传递还是引用传递? 答:是值传递.Java 语言的参数传递只有值传递.当一个实例对象作为参数被传递到方法中时,参 ...

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

    编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢? 比如下面这样 @RequestMapping(value="/register", ...

  9. java方法中,传参是传值还是传址问题(对比C语言、C#和C++)

    问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...

随机推荐

  1. CCNA 课程 一

    OSI 参考模型: 7应用层 6表示层 5会话层 4传输层   --  TCP / UDP (端口号) 3网络层   --  IP (原IP地址,目标IP地址) 2数据链路层  -- ARPA / e ...

  2. 普通神经网络和RNN简单demo (一)

    2017-08-04 花了两天时间看了下神经网络的一点基础知识,包括单层的感知机模型,普通的没有记忆功能的多层神经网咯,还有递归神经网络RNN.这里主要是参考了一个博客,实现了几个简单的代码,这里把源 ...

  3. showModalDialog改进版,包括Chrome下的特殊处理

    父页面: if(window.ActiveXObject){ //IE          $("#choose_entp").click(function(){           ...

  4. 去除带有iframe页面中的2个滚动条[转]

    方法一:加载frame时修改高度 <div>    <iframe id="frame_content" name="frame_content&quo ...

  5. Elasticsearch-->Get Started-->Basic concepts

    https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-concepts.html There ...

  6. Luogu-2495 [SDOI2011]消耗战

    虚树第一题 对于每次询问的点建立一棵虚树,然后在树上DP,一个点的答案就是这个点的父边切断的代价与所有儿子切断的代价去最小值,当然如果这个节点是资源点则必须切父边 注意在虚树上一条边的代价应该是中间所 ...

  7. java中的特殊有用类

    1.MessageDigest:类似与md5加密算法应用的功能类

  8. Spring初学之FactoryBean配置Bean

    实体bean: Car.java: package spring.beans.factorybean; public class Car { private String name; private ...

  9. Redis 创建多个端口

    默认的是6379 可以用6380,6381开启多个 1.开启 ./redis-server ../etc/redis.6380.conf & 2.链接 redis-cli -p 6380 查看 ...

  10. webdriver 选择

    You only need   from selenium import webdriver . Execute   html= browser.find_element_by_xpath(" ...