- 浏览: 1041723 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (279)
- Apache net (10)
- JBoss Rules (3)
- Seam ACL (1)
- Seam (14)
- Seam JPA高级权限验证 (8)
- 待解决的问题.... (1)
- JAVA (43)
- Dwr (4)
- Ajax4JSF (1)
- JavaScript (27)
- 生活小常识 (17)
- Richfaces (3)
- seam自己经历 (14)
- JDBC (1)
- mysql (6)
- WebService (10)
- Java Web (4)
- Hibernate (13)
- J2EE框架整合 (3)
- Spring (9)
- BEA Weblogic (1)
- XML (1)
- log4j (6)
- CSS (2)
- javaIO文件的读写 (5)
- SVN服务器的安装 (5)
- powerDesigner (2)
- SQL常用语句 (3)
- wicket初学 (5)
- eclipse (7)
- 正则表达式 (1)
- ExtJS (6)
- maven(m2eclipse) (1)
- struts2.0 (9)
- JPA (6)
- struts2.0整合spring2.5 (9)
- linux (6)
- Oracle (5)
- Servlet (3)
- MyEclipseGen (0)
最新评论
-
qq_31247573:
JAVA 获取http返回XML的数据 -
jasmine_20100810:
...
linux下tomcat服务的启动、关闭与错误跟踪 -
weiaiFang0624:
视频下载地址:http://download.csdn.net ...
there is no action mapped for namespace / and action name解决办法 -
p476462534:
JS控制表单form的提交 -
dandongsoft:
aaaaaaaaaaaaaaa
httpClient,JAVA访问http request response
这段代码的主要部分调用了两个很相近的方法,changeObj()和changePri()。唯一不同的是它们一个把对象作为输入参数,另一个把Java中的基本类型int作为输入参数。并且在这两个函数体内部都对输入的参数进行了改动。
java中的八大基本数据类型:int long float double short byte char boolean
看似一样的方法,程序输出的结果却不太一样。changeObj()方法真正的把输入的参数改变了,而changePri()方法对输入的参数没有任何的改变。
从这个例子知道Java对对象和基本的数据类型的处理是不一样的。和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。
这种方式的参数传递被称为"值传递"。而在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对这个对象的直接操作。
class MyDemo { public static void operate(StringBuffer x, StringBuffer y) { x.append(y); y = x; System.out.println(x + "," + y); } public static void main(String[] args) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); operate(a, b); System.out.println(a + "," + b); } } 结果: AB,AB AB,B
解释: 很明显你这里传递的是地址(引用)传递2个StringBuffer 对象! 注意啦: x 会指向 a 所指向的内存(可以理解为都指向A),y 会指向 b 所指向的内存,(可以理解为都指向B) x.append(y); //这句话把 y 指向的值追加给x指向的值,这个时候x 和a 指向的内存都是AB,y指向的内存仍然是B y=x;//这句话就是把 x 的值 附值给 y, 附的是地址! 这样 a,y,x 同时值向 AB,b仍然指向 B System.out.println(x+","+y); 这里所以打印 AB,AB System.out.println(a+","+b); 这里所以打印 AB ,B 引用参数的传递是把原来的地址传递给新的变量,原来引用的仍然在那里!
下面还是例子:
//在函数中传递基本数据类型, public class Test { public static void change(int i, int j) { int temp = i; i = j; j = temp; } public static void main(String[] args) { int a = 3; int b = 4; change(a, b); System.out.println("a=" + a); System.out.println("b=" + b); } } 结果为: a=3 b=4 原因就是 参数中传递的是 基本类型 a 和 b 的拷贝,在函数中交换的也是那份拷贝的值 而不是数据本身;
public class Test { public static void change(int[] counts) { counts[0] = 6; System.out.println(counts[0]); } public static void main(String[] args) { int[] count = { 1, 2, 3, 4, 5 }; change(count); } } 结果是:6 在方法中 传递引用数据类型int数组,实际上传递的是其引用count的拷贝,他们都指向数组对象,在方法中可以改变数组对象的内容。即:对复制的引用所调用的方法更改的是同一个对象。
这个要和下面的比较下: class A { int i = 0; } public class Test { public static void add(A a) { a = new A(); a.i++; } public static void main(String args[]) { A a = new A(); add(a); System.out.println(a.i); } } 输出结果是0 在该程序中,对象的引用指向的是A ,而在change方法中,传递的引用的一份副本则指向了一个新的OBJECT,并对其进行操作。 而原来的A对象并没有发生任何变化。 引用指向的是还是原来的A对象。 class A { int i = 0; } public class Test { public static void add(A a) { //a = new A(); a.i++; } public static void main(String args[]) { A a = new A(); add(a); System.out.println(a.i); } } 输出结果是1
String 不改变,数组改变 public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String args[]) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); System.out.println(ex.ch); } public void change(String str, char ch[]) { str = "test ok"; ch[0] = 'g'; } } 程序3输出的是 good and gbc. String 比较特别,看过String 代码的都知道, String 是 final的。所以值是不变的。 函数中String对象引用的副本指向了另外一个新String对象,而数组对象引用的副本没有改变,而是改变对象中数据的内容. 对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
发表评论
-
java 格式 ISO 8601 日期
2011-10-18 18:25 2769最终转化的格式如下: ISO format: 2011-10- ... -
SimpleDateFormat
2010-08-17 23:20 1518******字符串转化成日期的效率比日期转化成字符串的效率要高 ... -
JAVA判断不等于空的情况
2010-08-12 09:49 5894判断不等于空的情况,千万不要搞混淆。 if(orderId ... -
如何设置JDK环境变量
2010-06-12 22:35 1187依次点击:“我的电脑”-(右键)“属性”-“高级”-“环境变量 ... -
Collections.sort排序的用法
2010-04-02 16:11 5528private void sortScene(Movie m) ... -
java发邮件的包commons-email-1.0.jar
2010-03-26 10:41 1542java发邮件的包commons-email-1.0.jar -
httpClient,JAVA访问http request response
2009-12-23 11:02 9992package com; import java.io. ... -
jcaptcha生成图形验证码的Java开源组件
2009-12-23 10:57 1520jcaptcha生成图形验证码的Java开源组件 -
JAVA读取excel的包jxl.jar和jexcelapi_2_6_9_1.4.zip
2009-12-23 10:51 2190JAVA读取excel的包jxl.jar和jexcelapi_ ... -
java二维数组的遍历和JS的数组比较
2009-12-19 13:02 5625Object[][] srcs = { {1514l ... -
java获取图片的宽和高
2009-12-18 09:47 24840有两种要考虑的情况: 一种是:(图片在本地可以预览到),方法 ... -
JAVA 获取http返回XML的数据(另一篇)
2009-12-17 12:04 12328JAVA-用HttpClient来模拟浏 ... -
JAVA 获取http返回XML的数据
2009-12-17 11:37 32473下面有我自己的代码和 ... -
String字符编码转换
2009-12-17 10:41 3321String newStr = new String(oldS ... -
完全数的java代码
2009-12-14 14:28 3227求1到100000之间的所有的“完全数”,好像是叫“完全数”, ... -
做template时配置文件的解析
2009-12-06 12:12 13501.页面中有Page.action?returnPage=sc ... -
Java中的23种设计模式
2009-11-23 16:55 1109Java中的23种设计模式: Factory(工厂模式) ... -
java的一道笔试题
2009-11-17 16:52 1092java的一道笔试题: public class Test ... -
String的replace的奇怪用法
2009-11-05 18:03 11401.代码如下: String strIds = sceneI ... -
java时间操作函数汇总
2009-09-24 18:01 10011.计算某一月份的最大天数Calendar time=Cale ...
相关推荐
主要介绍了Java中值传递和引用传递的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
抽象类与接口的区别-java中值类型和引用类型的区别.docx
在java开发中经常会遇到值类型和引用类型知识,但是有很多朋友不清楚java中值类型和引用类型的区别,今天小编通过本文给大家介绍下
中值滤波Java实现.实现图像中值滤波。
主要给大家介绍了关于Java中值类型和引用类型的比较与问题解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
主要给大家介绍了关于Java中值传递的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
举个单一类(不存在继承关系)的例子,在函数以值方式传递对象,并要求返回对象时,对象会调用两次拷贝构造函数,分别是在实参赋值形参和返回对象时进行调用。因为函数内部参数在内存栈中进行分配,所以当函数返回时...
用java实现中值滤波与均值滤波,具体包括通过按钮实现对彩色图像的滤波处理。
主要介绍了C#中值类型和引用类型的区别深度分析,以通俗易懂的语言形象化的分析了C#中值类型和引用类型的区别,对于深入理解C#数据类型有着不错的参考借鉴价值,需要的朋友可以参考下
实现下拉列表JComboBox中值和显示不同
均值滤波和中值滤波的内容非常基础,均值滤波相当于低通滤波,有将图像模糊化的趋势,对椒盐噪声基本无能为力。中值滤波的优点是可以很好的过滤掉椒盐噪声,缺点是易造成图像的不连续性。
主要介绍了Python中 传递值 与 传递引用 的区别解析,非常不错,具有参考借鉴价值,需要的朋友参考下吧
通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。 二、传递值类型参数值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法...
自己总结的js中值类型与引用类型的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合网页前端的爱好者和学习者
java实现图像中值滤波
中值滤波与高斯滤波的实验性对比 代码 可供参考
JavaScript中值类型和引用类型的区别 JavaScript中的值类型的值是不可变的: 任何方法都无法改变值类型的值。数字、布尔值、null和undefined等都属于不可变类型。比如,修改一个数值的内容,本身就说不通。虽然字符...
文件包含了数字图像处理这门课程中的中值滤波和均值滤波的基本实现代码
均值滤波和中值滤波在matlab中的应用及其matlab代码