泛泛的谈,可以说,有时可以有时不可以. 那我们就具体些,直入主题,看疗效吧.下面是一个例子:
import java.util.LinkedList; import java.util.List; public class Api { public static final void main(String[] args) { int tmp = 10; change(tmp); //可以看到,传入的temp没有被修改掉 System.out.println(tmp); List<Integer> list = new LinkedList<Integer>(); change(list); //可以看出,传入的List被修改了,之前大小是0,现在打印结果是1 System.out.println("size=" + list.size()); } public static void change(int tmp) { tmp = tmp * 2; } public static void change(final List<Integer> list) { list.add(1); } }
实际上,上面这个问题和这个问题是一个问题"JAVA函数传递的是值,还是引用"
JAVA传递的是值,只不过这个值的Value是变量的引用.
change(int tmp)之所以没有修改传入的值,是因为Integer是不可变对象,不能直接修改Integer的值,只能生成一个新的对象然后指向它.这样函数里面的临时变量和传入的变量值(引用)已经不一样了
change(final List<Integer> list) 里面的值之所以被修改了,是因为参数出入的值是引用,引用没有变,但是引用的对象变了.由于引用的对象变了,所有指向这个对象的变量当然也就变了.
细心的你可能已经发现,change(int tmp)这个参数不能添加final.
如果添加就是代表tmp不能修改为别的对象,而change(final List<Integer> list)却可以. 原因也是一样的:
change(int tmp):在函数的内容中,我们会对tmp进行修改,导致tmp指向不同对象,如果声明为final则修改处会出现语法错误.
change(final List<Integer> list):虽然final修饰后不能修改为别的对象,但是对象里面的内容是可以修改的.
相关推荐
函数调用时,参数传递的方式主要有两种: 值传递和引用传递。 Java使用的是值传递。值传递是把变量的值、常数或常量传递给参数。而引用传递,是把变量的所在内存中的地址传递给参数,参数通过地址找
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
函数是 Python 内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的 函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。 函数就是面向过程的程序设计的基本单元。 ...
2) 如何将java传入的String参数转换为c的char*,然后使用? 57 3) 将c中获取的一个char*的buffer传递给java? 57 4) 不知道占用多少空间的buffer,如何传递出去呢? 58 五、 对JAVA传入数据的处理 58 1) 如果传入的是...
函数本身可以赋值给变量,赋值后变量绑定函数 允许将函数本身作为参数传入另一个函数 允许返回一个函数 函数的可重入性: 可重入是指一个函数传的参数一定,则结果必须一定 要求: def定义的函数不要访问除...
编程,就可以通过javascript调用被注册的java对象并返回java对象,如果被返回的对象 还有方法,这个在javascript中返回的java对象的变量,你还可以继续调用它的方法.....这就是这个轻 量级json-rpc-for-java的神奇之...
php的基本语法和c/c++,java的差不多,只是php在定义变量时没有要显示声明变量类型,php对变量的...所以在函数中可以根据不同情况返回不同类型的值,以及可以向函数传入不定数量的参数,这一点像c/c++,java是做不到的
通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个 JS 框架必须支持的功能,jQuery 被应用在成千上万的 JavaScript 程序中,必须确保 ...
本文实例分析了javascript中eval函数用法。分享给大家供大家参考。...最为重要的是,它使用了调用它的变量作用域环境,即它查找变量的值和定义新变量和函数的操作和局部作用域的代码完全一样。 eval(va
1.Js函数可以传入不同的参数,如 function writeNString(strMsg){ [removed](strMsg + " "); } 2.Js函数返回值,js函数可以将运行的结果返回,函数可以视为一个黑盒子,使用参数输入数据后产生所需的运行结果,...
派生类可以从它的基类那里继承方法和变量 , 并且类可以修改或增加新的方法使之更适合特殊的需要。 在一个程序中,这些独立运行的程序片断叫作"线程〞〔Thread〕,利用它编程的概 念就叫作"多线程处理〞 【3】。多...
派生类可以从它的基类那里继承方法和变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。 在一个程序中,这些独立运行的程序片断叫作"线程"(Thread),利用它编程的概念就叫作"多线程处理" 。多线程处理一...
为了实现这个移动,函数将数组的第一个元素存储在变量array_element中,并将数组中的其他元素向左移动一个位置。 然后,将array_element存储在数组的最后一个元素中,这样,数组中的元素就会向左移动一个位置。 重复...
•使用final修饰局部变量时既可以在定义时指定默认值,也可以不指定默认值。 •给局部变量赋初始值,只能一次,不能重复。 final修饰基本类型和引用类型 •当使用final修饰基本数据类型时,不能对其重新...
方法名称方法解释setBasedir(String)设置lua代码的最外层目录,所有lua代码都应该存放在这个目录或其子目录下pushGlobal(String, Object)设置全局lua的全局变量或函数,可以push普通的Object,或者JavaFunction。...
()运算符作用于一个函数指针将会执行它所在的函数,当然还会传入参数。 2.函数直接量(函数文字量) 实际上函数直接量这个说法并不准确 但可以通俗地解释一些用法 125 “good”是都是直接量 可以在
* initialization 实例化类成员变量 */ private void initialization(String sender, String addressee, String subject, String text) { this.sender = sender; this.addressee = addressee; this.subject = ...
JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,...
魔法值是指程序中随意定义并赋值的变量值,如果代码编写者明白变量值意义是可以任意使用的,例如在代码中写if(status == 3) return error;符合规范。 C .如果变量值仅在一个范围内变化推荐用Enum类。 D .在程序...