所谓的传引用,其本质还是传值。所以JAVA只有一种传递参数的方式---传值!但是这个值的概念有两层含义: 我假设大家明白什么是传值,其实就是传一个拷贝。 1.对于简单类型,如int,boolean,short等等,就是简单的传值。 2.对于对象类型(也可以说是复杂类型),Java传的是对象的地址的值(还是传值)。原因如下: 第一的原理就不说,大家都懂。 第二的道理是这样的,先看个例子: (1) class A { int X = 0; void printX() { System.out.println("The value of X: " + X); } }public class test { public static void main(String[] args) { A ObjectA = new A(); ObjectA.X = 123; System.out.println("The initialize value X = " + ObjectA.X); byValue(ObjectA); System.out.println("After the byValue: X = "+ ObjectA.X); byReference(ObjectA); System.out.println("After the byReference: X = " + ObjectA.X); } public static void byValue(A a) { a = new A(); a.X = 10; a.printX(); } public static void byReference(A a) { a.X = 20; a.printX(); }} 说明:其实所谓的对象传引用就是传递对象的地址值。我们可以从byValue函数看到,尽管改变了对象a所的指向,但是这样的变化并没有体现在传入变量ObjectA上这是为什么呢?就是因为Java的函数传递的是对象的地址,也就是传递对象值的拷贝。a和ObjectA根本就两块内存,虽然他们一开始内容一样,都指向同一块内存,但是,改变对象地址变量a的内容并不会影响ObjectA的内容,a实际上是ObjectA的拷贝。这就是传值的本质了。第二个函数byReference看起来是不是有些让人困惑。其实,还是传值,因为这个函数里的a变量还是ObjectA的拷贝,但是他们始终是指向同一个对象的。因此,改变了a.X的值也就是改变了ObjectA.X的值。总结,前面说的都是废话,现在开始回答搂主的问题:问:请问java怎么实现传递引用? 答:java从来就不支持传递引用,Java对于对象的传递其实是传递对象的地址值,本质就是传值,对于简单类型的传递还是传值。Java里面一切都是对象,一切都是传值。(后面那句是我加的,呵呵)
java 类似C 指针的是HASHTABLE OR HASHMAP : PUT VALUE (KEY,VALUE) 取VALUE 可以通过 GET(KEY)得到VALUE.
{
aaa=12;
}
这样怎么用,谢谢先。
我假设大家明白什么是传值,其实就是传一个拷贝。
1.对于简单类型,如int,boolean,short等等,就是简单的传值。
2.对于对象类型(也可以说是复杂类型),Java传的是对象的地址的值(还是传值)。原因如下:
第一的原理就不说,大家都懂。
第二的道理是这样的,先看个例子:
(1)
class A
{
int X = 0;
void printX()
{
System.out.println("The value of X: " + X);
}
}public class test
{
public static void main(String[] args)
{
A ObjectA = new A();
ObjectA.X = 123;
System.out.println("The initialize value X = " + ObjectA.X); byValue(ObjectA);
System.out.println("After the byValue: X = "+ ObjectA.X); byReference(ObjectA);
System.out.println("After the byReference: X = " + ObjectA.X);
} public static void byValue(A a)
{
a = new A();
a.X = 10;
a.printX();
} public static void byReference(A a)
{
a.X = 20;
a.printX();
}}
说明:其实所谓的对象传引用就是传递对象的地址值。我们可以从byValue函数看到,尽管改变了对象a所的指向,但是这样的变化并没有体现在传入变量ObjectA上这是为什么呢?就是因为Java的函数传递的是对象的地址,也就是传递对象值的拷贝。a和ObjectA根本就两块内存,虽然他们一开始内容一样,都指向同一块内存,但是,改变对象地址变量a的内容并不会影响ObjectA的内容,a实际上是ObjectA的拷贝。这就是传值的本质了。第二个函数byReference看起来是不是有些让人困惑。其实,还是传值,因为这个函数里的a变量还是ObjectA的拷贝,但是他们始终是指向同一个对象的。因此,改变了a.X的值也就是改变了ObjectA.X的值。总结,前面说的都是废话,现在开始回答搂主的问题:问:请问java怎么实现传递引用?
答:java从来就不支持传递引用,Java对于对象的传递其实是传递对象的地址值,本质就是传值,对于简单类型的传递还是传值。Java里面一切都是对象,一切都是传值。(后面那句是我加的,呵呵)