泛泛的谈,可以说,有时可以有时不可以. 那我们就具体些,直入主题,看疗效吧.下面是一个例子:
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函数语言大全”可能引起了一些误解,实际上,描述中提到的是“C语言函数大全”,所以我们将重点讨论C语言的函数相关知识。 在编程语言中,函数是执行特定任务的可重用代码块。C语言作为基础且强大...
### Java函数详解 #### 一、函数的基本概念 ...通过以上介绍,我们可以看到Java函数的强大功能及其在实际开发中的重要作用。合理地使用函数不仅可以提高代码的可读性和可维护性,还可以有效地提升开发效率。
4. **变量args**:在方法签名中,使用`...`操作符可以创建一个可变长度的参数列表,这样你就可以传入任意数量的相同类型的参数。例如,`public void printNumbers(int... numbers)` 方法可以接受零个或多个整数。 5...
在Java编程语言中,`eval`函数通常与JavaScript关联,因为JavaScript有一个内置的`eval`函数,它能够解析并执行一个字符串作为JavaScript代码。然而,Java本身并不直接提供类似的功能。`eval`函数在Java中并不是标准...
在这段代码中,`this`使得构造函数能够正确地将传入的参数赋值给相应的成员变量,而不是覆盖它们。此外,`this`还可以用于调用当前对象的其他方法或属性,例如,如果有一个`displayInfo()`方法,可以使用`this....
在Java编程语言中,函数参数传递机制是一个关键概念,它涉及到如何在方法内部操作传入的参数。根据Java的特性,参数传递分为两种主要类型:值传递和引用传递。下面我们将详细探讨这两种传递方式以及它们在不同数据...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
在"java试验,random函数调用等问题"中,我们可能涉及以下几个关键知识点: 1. **Random类的创建**: 在Java中,我们首先需要通过`new Random()`来实例化一个`Random`对象,然后才能调用它的方法来生成随机数。...
2. **引用传递**:通过引用传递参数,构造函数可以直接访问并修改调用者提供的变量。这在需要改变对象状态或避免不必要的拷贝时非常有用。在C++中,可以使用`&`符号来声明引用参数。例如,`void foo(MyClass& obj)`...
此外,我们还可以定义一个泛型构造函数,比如`GenericEntry(T data, int rank)`,它接受一个泛型参数`T`,并将其存储到类的成员变量`data`中。 4. **泛型构造函数的优势** - **类型安全**:通过泛型,编译器可以在...
6. **传递参数和接收结果**:在Delphi中,你可以使用上述函数,传入Java接口名、方法名以及参数,调用Java方法并获取返回值。 ```delphi const ClassName = 'com/example/MyJavaClass'; MethodName = '...
函数内部可以访问全局变量,如`PER_PRICE_1`和`NUMBER_1`,但若在函数内部修改全局变量,需要使用`global`关键字。如果不使用`global`,在函数内部对全局变量的修改实际上是创建了一个局部变量,这可能导致预期外的...
Java Native Access(JNA)是Java平台上的一个库,它允许Java代码直接调用本地(操作系统级别的)函数,而无需编写任何JNI(Java Native Interface)代码。JNA通过提供一个映射机制,将Java方法与C/C++函数相对应,...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
在进行Web开发时,尤其是使用JSP技术开发动态网站时,我们常常需要处理服务器端Java变量与客户端JavaScript变量之间的数据交互问题。JSP(JavaServer Pages)是一种用于开发动态网页的技术,它允许我们在HTML页面中...
在日志函数中使用`log.log()`并传入格式化的字符串和对象数组,可以减少字符串连接的开销,尤其是在循环中。 接着,我们来看Java 8引入的新特性——函数式编程。函数式编程的核心概念是将函数作为一等公民,允许将...
在Java中,基本类型(如int, double)是按值传递,意味着传入函数的是变量的副本,而对象引用是按引用传递,传递的是对象在内存中的地址,而不是对象本身。 3. **封装**: 封装是面向对象编程的一个核心原则,它...
构造器重载是指在同一个类中定义多个具有相同名称但参数列表不同的构造器,这样可以根据传入的参数类型和数量来创建不同的对象实例。 14. **解释什么是多态性(Polymorphism)** 多态性是面向对象编程的重要特性...