JAVA函数的参数传递
JAVA开发过程中写函数都是不可避免的于是乎参数传递经常会困扰我们,特别是有C/C++功底的童鞋总会纠结于“java到底是值传递还是引用传递?”
先来一段代码(和程序员交流最好的果然还是代码)
public class TestMain {
        public static void main(String[] args) {
                List<Integer> list = new ArrayList<Integer>();
                for (int i = 0; i < 10; i++) {
                        list.add(i);
                }
                add(list);
                for (Integer j : list) {
                        System.err.print(j+",");;
                }
                System.err.println("");
                System.err.println("*********************");
                String a="A";
                append(a);
                System.err.println(a);
                int num = 5;
                addNum(num);
                System.err.println(num);
        }
        static void add(List<Integer> list){
                list.add(100);
        }
        static void append(String str){
                str+="is a";
        }
        static void addNum(int a){
                a=a+10;
        }
}
打印出来的结果是:
0,1,2,3,4,5,6,7,8,9,100,
*********************
A5
根据Horstmann的《java核心技术》(中文第8版P115-P117)的描述,java中是没有引用传递的,原文摘录如下:
“java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。”
“有些程序员(甚至是本书的作者),认为java程序设计语言对对象采用的是引用调用,实际上这种理解是不对的。”
public class TestMain {
        public static void main(String[] args) {
                List<Integer> list = new ArrayList<Integer>();
                for (int i = 0; i < 10; i++) {
                        list.add(i);
                }
                {
                    List<Integer> list1 = lsit;
                    list1.add(100);
                }
                for (Integer j : list) {
                        System.err.print(j+",");;
                }
                System.err.println("");
                System.err.println("*********************");
                String a="A";
                {
                    String a1 = a;
                    a1 += "is a";
                }
                System.err.println(a);
                int num = 5;
                 {
                  int a1 = num;
                  a1 = a1 + 10;
                }
                System.err.println(num);
        }
}
                                                
红色部分就是被展开的函数,参数中的变量的值是外部传入的值,函数内修改的都只是函数内部变量的值,这样能理解函数的参数到底传递的是什么了么?
在有人和你说值传递和引用传递,直接糊他一脸吧~~~
JAVA函数的参数传递的更多相关文章
- java 中函数的参数传递详细介绍
		
java中函数的参数传递 总结: 1.将对象(对象的引用)作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的对象. 2.当将基本类型或基本类型的包装集作为参数传递时 ...
 - 14.Java基础_函数/函数重载/参数传递
		
Java函数和函数重载 /* 函数定义: public static 返回类型 func(参数){ 方法体: } 函数重载 在调用时,Java虚拟机会通过参数的不同来区分同名的函数 满足: 1.多个函 ...
 - Java和JavaScript(函数)参数传递是按值传递还是按引用传递?
		
结论:Java和JavaScript的所有(函数)参数传递都是按值传递! 1.什么是函数参数的传递是按引用传递? 什么是引用?这个概念多见于C++中,在C++中,引用解释为变量的别名. 1 #incl ...
 - Java函数参数传递方式详解
		
在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式: A. 是按值传递的? B. 按引用传递的? C. 部分按值部分按引用? 此处暂不宣布正确答案,我们通过一个简 ...
 - 面向对象----构造方法、this 关键字、函数的参数传递、package语句/import语句
		
构造方法 构造器的定义.作用 构造方法的特征 它具有与类相同的名称:它不含返回值: 注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动 ...
 - Java 函数的参数说
		
java函数参数传递的到底是值还是引用对确实容易让人迷糊.而很多时候因为对这个问题的模糊甚至造成一些错误.最常见的说法是基本类型传的是值,对象传的引用.对于基本类型,大家都达成共识,没有什么可以争论的 ...
 - java函数参数默认值
		
java函数参数默认值 今天,需要设定java函数参数的默认值,发现按照其它语言中的方法行不通 java中似乎只能通过函数的重载来实现 函数参数默认代码
 - C语言中如何将二维数组作为函数的参数传递
		
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
 - JS调用Java函数--DWR框架
		
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...
 
随机推荐
- 10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型
			
通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...
 - linux命令学习6-dpkg命令
			
dpkg命令是Debian Linux系统用来安装.创建和管理软件包的实用工具. 1. 语法 dpkg (选项) (参数)2. 选项 -i:安装软件包: -r:删除软件包: -P:删除软件包的同时删除 ...
 - linux学习小记:如何查看linux服务器的cpu数量,内核数,和cpu线程数
			
查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 查看每个cpu核心数量 grep 'core id' /proc/cpuinf ...
 - BZOJ 1101 [POI2007]Zap ——Dirichlet积
			
[题目分析] Dirichlet积+莫比乌斯函数. 对于莫比乌斯函数直接筛出处理前缀和. 对于后面向下取整的部分,可以分成sqrt(n)+sqrt(m)部分分别计算 学习了一下线性筛法. 积性函数可以 ...
 - 按住ctrl键可以在新窗口打开图片
			
用firebug查看网页时,img标签(或background属性里面的url地址源)里面的图片源按住ctrl键可以弹出新窗口显示,并可右键另存为到本地目录
 - $(function(){})和$(document).ready(function(){}) 的区别
			
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
 - 与文件上传到的三个类:FileItem类、ServletFileUpload 类、DiskFileItemFactory类
			
文件上传: ServletFileUpload负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中, 在使用ServletFileUpload对象解析请求时需要根据DiskFi ...
 - A窗口消失B窗口弹出
			
一.设计窗口 1) file---new--Application,新建一个窗体,设置该窗体的属性:Caption==登录窗口 2) procedure TForm1.btn1Click(Sender ...
 - Memcached Client的释疑
			
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcached是建立在libmemcached的基础 ...
 - PayPal为什么从Java迁移到Node.js
			
前言 大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal 解释了为什么从Java迁移出来的原因: 开发效率提高一 ...