先说结论:java的传参方式是值传递
基本类型:int,float,double等,基本类型的变量存储在栈中.每个基本类型都对应着一个包装类 :int-Integer , float-Float
对象类型:所有继承Object的类对象,存储在堆中
对象之间的赋值:传递的是引用。对一个对象赋值时,真正操作的是这个对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方。这意味着假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象,对象自身并不发生任何改变。
A a = new A(); b = a;
基本类型存储了实际的数值,对基本类型数据赋值实际上是对内容的拷贝。例如,对基本数据类型使用a=b,那么b的内容就复制给a.若接着又修改了a,而b根本不会受这种修改的影响。
int a = 3; int b = a;
基本类型使用“==”比较的是值,是内容
对象类型使用"=="比较的是引用(指向内存地址的指针),如果要比较内容,则需要重写equals方法.String类重写了equals方法,比较的是字符串内容。
Object的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}

参数传递:
Java只有一种参数传递方式:那就是按值传递,即Java中传递任何东西都是传值。
如果传入方法的是基本类型的东西,你就得到此基本类型的一份拷贝。如果是传递引用,就得到引用的拷贝(把实参对象引用的地址当做值传递给了形式参数)。
View a = new View(context);
public void pass (View b){
b =new View(getContext());
b.setAlpha(0);
}
调用pass(a)后,a的引用没有被改变,还指向原来的对象。
View a = new View(context);
public void pass (View b){
b.setAlpha(0);
}
调用pass(a)后,虽然a指向的对象中内容被改变,但a的引用依然没有被改变,还指向原来的对象。
Java的实例化
-
使用new关键词创建对象
-
通过jdk中提供的工厂方法返回对象。如String str = String.vlaueOf("test");
-
通过反射机制。 a.getConstructor();
-
通过类的clone()方法。
-
通过反序列化手段
网友评论