- 浏览: 365688 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
驭乐MJ:
你好,我卸载rar后,按命令执行安装unrar或者是p7zip ...
Ubuntu rar 乱码问题 -
郭建雄:
不错,受用了,谢谢你的分享 !
java线程中的interrupt,isInterrupt,interrupted方法 -
zuosheng:
...
用ViewFlipper实现各种切换动画 -
lxtkong-029:
原来一直不是很清楚,看来你的文章明白了,太感谢了!
java线程中的interrupt,isInterrupt,interrupted方法 -
ihopethatwell:
嗯,看到了,要在项目中添加jni
Ubuntu 10.04安装android NDK
5. 如何实现类似 swap 的方法 传值还是传引用的问题,到此已经算是解决了,但是我们仍然不能解决这样一个问题:如果我有两个 int 型的变量 a 和 b,我想写一个方法来交换它们的值,应该怎么办? 结论很让人失望——没有办法!因此,我们只能具体情况具体讨论,以经常使用交换方法的排序为例: /** 例 6 */ /** * @(#) Test.java * @author fancy */ public class Test { public static void swap(int[] data, int a, int b) { int t = data[a]; data[a] = data[b]; data[b] = t; } public static void main(String[] args) { int[] data = new int[10]; for (int i = 0; i < 10; i++) { data[i] = (int) (Math.random() * 100); System.out.print(" " + data[i]); } System.out.println(); for (int i = 0; i < 9; i++) { for (int j = i; j < 10; j++) { if (data[i] > data[j]) { swap(data, i, j); } } } for (int i = 0; i < 10; i++) { System.out.print(" " + data[i]); } System.out.println(); } } 运行结果(情况之一): 78 69 94 38 95 31 50 97 84 1 swap(int[] data, int a, int b) 方法在内部实际上是改变了 data 所指示的对象的成员数据,即上述讨论的第二种改变参数值的方法。希望大家能够举一反三,使用类似的方法来解决相关问题。 第二种说法 关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象). 首先以两个例子开始: 1) public static void main (String [] args) { static void operate(StringBuffer x, StringBuffer y){ 2) public static void add3 (Integer i){ public static void main (String args [ ] ) { 首先我们应该明白JAVA中的参数传递全是以值传递的。 是基本类型,就拷贝一个基本类型传进方法; 是引用,就拷贝一个引用变量传进去方法, 理解了这两点就能理解方法操作对象的相关问题了。最好能画出引用指向对象的图出来,就能完全理解了。 Java中的参数传递只有一种方式: by value. 理论说教太麻烦了,直接看些例子吧: 2). 引用类型 理解这里的关键是区分对象和引用。 这里声明的x是一个引用,而不是一个对象(只是Java把它设计为看上去好像是对象一样)。这个引用它指向了一个对象,这个对象就是后面用new关键字生成的对象。因此,可以说x指向了一个Integer对象。 有人说了数组。数组也是一个引用类型,它的参数传递方式按照引用类型的参数传递一样可以解释得通: import java.util.Arrays; public class A{ 对象是传引用,简单类型是传值,不要被网上的一些概念所迷惑!!!你可以自己做个试验。 运行结果:Hello 下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果? import java.util.arraylist; plumechen: 不会出错的。结果是0,1。 因 为test2(list)传得是list的引用,我理解成指针置的副本,list=null;只是把那个传入的值设置为null,不改变原来list的指 针和内容。test3(list)传入的一样,但是执行了list.add()由于传入指针值的副本也指向原来的那个list的地址,所以原来的那个 list的内容就改变了,size变成了1了 总结:对于第一种说法,注意理解“引用是一种数据类型”,对于第二种说法,要理解“参数是引用的一个拷贝” 转自:http://blog.csdn.net/baobeiSimple/archive/2007/08/05/1727053.aspx
1 31 38 50 69 78 84 94 95 97
public class Test2 {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a+","+b);
}
x.append(y);
y = x;
}
}
输出:AB,B
public class Test2 {
int val=i.intValue();
val += 3;
i = new Integer (val);
}
Integer i = new Integer (0);
add3 (i);
System.out.println (i.intValue ( ));
}
}
输出:0
第1 题,调用operate方法时,传入了两个引用a,b的拷贝x,y,这两个x,y都指向原a,b引用所指向的对象。x.append(y)对它指向的对象 (即a指向的对象)进行了操作。而x=y,只是两个拷贝变量在赋值,并没有影响到原b所指向的对象。所以b所指向的对象仍然为B。
第2题,i=new Integer(val)只是一个引用的拷贝指向了另外一个对象,而原来的i仍然是指向对象new Integer(0)的。
把握住了JAVA都是传值并且传的都是拷贝的话,类似的题大家都能迎刃而解了。
1). 基本类型
public class A{
public static void main(String[] args){
int x = 1;
System.out.println(x); //1
test(x);
System.out.println(x); //还是1==>By value
}
static void test(int a){
a = 2;
}
}
public class B{
public static void main(String[] args){
Integer x = new Integer(1);
System.out.println(x);
test(x);
System.out.println(x);
}
static void test(Integer a){
a = new Integer(2);
}
}
在调用test方法的时候,程序将x作为参数传递给test方法了。这里仍然是值传递,在test调用过程中,会产生一份新的引用(不妨叫做y)。此时,x和y指向了同一个对象。
x和y指向的是同一个对象, 由于Java的设计,我们可以通过操作引用来达到操作对象的目的。因此,如果我们此时使用y来修改对象的属性 (例如,y.someField++); 你可以看到x指向的对象同时也被修改到了。
另一方面,如果我们让y指向另外一个对象, y=new Integer(2); 此时x和y就指向了不同的
对象。y修改了它指向的对象的属性,很显然不会影响到x指向的对象。
public static void main(String[] args){
int[] aa = {3, 2, 1};
System.out.println(Arrays.toString(aa)); //[3, 2, 1]
test(aa);
System.out.println(Arrays.toString(aa)); //[3, 2, 1]
test2(aa);
System.out.println(Arrays.toString(aa)); //[4, 2, 1]
}
static void test(int[] a){
a = new int[]{1, 2, 3}; //指向了新对象
}
static void test2(int[] a){
if(a != null && a.length > 0)
a[0]++; //修改原来的那个对象
}
}
至于String等类型传的还是引用。如果你用concat方法,String对象的原值就会被改变。
但你如果按如下方法:
public class Test {
public static void test(String str) {
str = "World";
}
public static void main(String[] args) {
String string = "Hello";
test(string);
System.out.println(string);
}
}
这里str = "World" 就等同于 String str=new String("World")。所以结果没有改变!!!
import java.util.list;
public class testclass {
public static void main(string args[]) {
list list = new arraylist();
test2(list);
system.out.println(list.size()); // 1处
test3(list);
system.out.println(list.size()); // 2处
}
public static void test2(list list) {
list = null;
}
public static void test3(list list) {
list.add(“aaaa“);
}
}
发表评论
-
通过FutureTask设置超时,用于请求网络,执行任何异步超时任务
2013-10-10 15:53 0public class TestConnectTimeOu ... -
java Future 接口介绍
2011-11-23 15:47 1077在Java中,如果需要设定 ... -
Java 判断文件的编码
2011-05-23 18:28 992首先,不同编码的文本,是根据文本的前两个字节来定义其编 ... -
Eclipse中附上/载入Java(JDK) 源代码
2011-05-18 15:04 1091在Eclipse中,大家都习惯按F3键方便地查看类、方法 ... -
java 经典排序算法
2011-05-18 14:43 6831、冒泡排序 Bubble Sort 最简单的排序方法 ... -
java版的二分查找算法
2011-05-18 11:42 761/** * @param data 从小到大排好序的 ... -
java 集合
2011-04-11 11:47 938这里说的集合指的是 ... -
JNI javah 未找到 javadoc: 错误 - 找不到类
2011-03-30 12:18 2490在编译生成 .class 文件后,进入该文件目录 ,执行类似 ... -
Java反射机制学习笔记
2011-03-15 16:57 1024一. 反射机制描述 Java的反射机制允许 ... -
Java关键字new和newInstance的区别方法
2011-03-15 15:07 747在初始化一 ... -
Java内存管理的9个小技巧
2011-03-02 22:55 6991、别用new Boolean()。 在很多场景中Boole ... -
java 正则表达式 常用符号总结
2011-02-28 13:40 1070•句点.表示单个字符 •方括号[]表示可能出现字符集里 ... -
全局变量的优缺点
2011-02-15 10:06 2549使用全局变量的优点是:可以减少变量的个数,减少由于实际参数和形 ... -
JAVA代码编写的30条建议
2011-02-14 17:57 729(1) 类名首字母应该大写。字段、方法以及对象(句 ... -
java传值or传引用 一
2011-02-14 16:25 943第一种说法 1. 简单类型是按值传递的 Jav ... -
java线程中的interrupt,isInterrupt,interrupted方法
2011-02-11 10:23 5592在java的线程Thread类中有三个方法,比较容易混淆,在这 ... -
进程和线程的区别
2011-02-11 09:51 895通俗一点说 ... -
Java线程之守护线程(Daemon)
2011-02-06 12:59 752Java有两种Thread:“守 ... -
java 异常总汇
2011-01-26 16:52 9261. java.lang.nullpointerexcepti ... -
关于java的集合类,以及HashMap中Set的用法!
2011-01-25 17:37 4280关于java的集合类,以及HashMap中Set ...
相关推荐
在Java编程语言中,函数调用时的参数传递方式有两种:传值(Passing by Value)和传引用(Passing by Reference)。虽然Java官方文档中并未明确指出有传引用这一概念,但在实际操作中,Java的行为类似于传引用,尤其...
"java中传值还是传引用的认识" Java 中的参数传递是值传递还是引用传递?这是一个经常引发讨论的问题。在 Java 中,参数传递是按值传递的,也就是说,传递给方法的参数是一个副本,而不是原始值本身。 当一个对象...
### Java是传值还是传址引用 #### 一、简单类型是按值传递的 Java在处理简单数据类型(如int、boolean等)时采用的是按值传递的方式。这意味着当你将一个简单类型的值作为参数传递给一个方法时,实际上传递的是这...
根据标题和描述,我们将深入探讨Java中传值与引用的区别,以及它们在实际编程中的应用。 首先,Java是一种“总是按值传递”的语言。这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并...
"Java中的传值与传引用实现过程解析" Java中的传值与传引用是Java编程语言中的一种基础概念,它们是Java函数中参数传递的两种方式。 Java中的传值是指函数参数的值被复制到函数内部,在函数内部对参数的修改不会...
"lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理之间传递参数。 首先,让我们了解一下Lotus Domino Java代理的基本概念。在Lotus Domino Designer中,Java代理是用Java语言...
Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE程序 界面传值问题Java SE...
第一次使用int实验: public class TTEST { private static List<UserEntity> mList = new LinkedList(); public static void main(String[] args) { int a = 0; changeA(a); System.out.println("a = "+a);...
总结起来,理解传值、传名(或传引用)和传地址的异同是编程基础的重要组成部分。它们影响着函数的可读性、效率以及程序的行为。在编写代码时,根据具体需求选择合适的参数传递方式,是提升代码质量的关键。
当我们讨论“引用类型传值”时,意味着在方法调用时,传递的是对象引用的一个副本,而不是对象本身。以下是对给定代码清单的详细解释: 1. `Circle.java` 文件定义了一个名为 `Circle` 的类,它包含一个 `double` ...
在Web开发中,JavaServer Pages (JSP) 和 Java Servlets 是常见的技术组合,用于构建动态、交互式的网页。在本场景中,我们探讨的是如何使用JSP通过Ajax(Asynchronous JavaScript and XML)发送JSON(JavaScript ...
### Java中对象与引用 在Java编程中,深入理解对象与引用的概念对于掌握面向对象编程至关重要。本文将从以下几个方面详细解析对象与引用的基本概念及其相互间的关系。 #### 一、对象与引用的基础概念 **对象**: ...
《Java仙剑奇侠传源代码》是一款基于Java J2ME平台开发的手机游戏,它再现了经典单机游戏《仙剑奇侠传》的世界观和游戏机制。J2ME,全称为Java Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备...
Java方法参数传值是Java编程中的基础知识点,涉及变量、数据类型和方法调用的机制。在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括布尔型(boolean)、字节型(byte)、短整型(short)、整型...
1. **传值与传引用的区别** - **传值**:基本数据类型(如int、char等)的参数传递是值传递,也就是说,方法内部对参数的修改不会影响到方法外部的变量。 - **传引用**:对于对象,Java总是采用引用传递。这意味着...
`OR-Tools`是谷歌推出的一个开源的、强大的优化工具箱,它支持多种编程语言,包括Java。本篇文章将深入探讨如何利用OR-Tools的Java API解决一个具体的实例——“人员排班问题”。 人员排班问题是一个典型的线性规划...
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
在IT行业中,页面传值与后台传值是Web开发中的基础技能,特别是在使用Java进行后端处理时。这里我们将深入探讨这两个概念,并结合标签“jsp”和“json”,阐述它们在实际开发中的应用。 首先,页面传值指的是前端...