Java按值传递还是按引用?函数可修改传入变量吗?
来源:互联网 发布:udp攻击21端口 编辑:程序博客网 时间:2024/06/06 06:31
1“Java中参数传递都是按值传递”按值传递是产地的值的拷贝,按引用传递传递的是引用的地址值,所以统称为按值传递。
2 基本类型,String = “hello” 是按值传递的,其余都按引用传递。
函数可修改传入变量吗?
基本类型不可以,引用类型可以
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 list) 里面的值之所以被修改了,是因为参数出入的值是引用,引用没有变,但是引用的对象变了.由于引用的对象变了,所有指向这个对象的变量当然也就变了.
细心的你可能已经发现,change(int tmp)这个参数不能添加final.
如果添加就是代表tmp不能修改为别的对象,而change(final List list)却可以. 原因也是一样的:
change(int tmp):在函数的内容中,我们会对tmp进行修改,导致tmp指向不同对象,如果声明为final则修改处会出现语法错误.
change(final List list):虽然final修饰后不能修改为别的对象,但是对象里面的内容是可以修改的.
0 0
- Java按值传递还是按引用?函数可修改传入变量吗?
- Java 按值传递 还是 引用传递
- Java按值传递还是引用传递
- JS变量传递参数是按值传递还是按引用传递
- Java函数传递参数:值传递还是引用传递
- java是按值传递还是按引用传递?
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说 .
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java-按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java-按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Java:按值传递还是按引用传递详细解说
- Ubuntu firefox 联网失败解决方法
- Oracle10gr2 开机自启动脚本
- Java爬虫,信息抓取的实现
- python语言基础
- YUM Q n A
- Java按值传递还是按引用?函数可修改传入变量吗?
- 第三天 iOS自动更新
- Annotaion 注解 详解案例
- java8 函数式编程
- 发卡流程图
- ECharts学习手札(1)--入门介绍
- dom4j如何取得name相同的节点
- 第四天 结队开发之多storyboard
- 【Android Studio快捷键】之代码手动提示