发布网友 发布时间:2022-04-21 22:18
共2个回答
热心网友 时间:2023-07-14 20:59
①对"c"的调用是不是一定要采用*.c的方式;
对于Letter类,你是这样定义的
classs Letter{char c;}
说明c是Letter类的一个属性,凡是属性,都是使用 “实例名.属性名” 的方式访问。
你在main方法中写了
Letter x = new Letter()
就是创造了一个Letter类的实例,实例名就是x。因为访问类的属性的规则是 “实例名.属性名”
因此使用x.c
②方法f(Letter y)的参数列表
方法参数的定义格式为 方法名(参数类型 参数名)
一个方法的参数可以是基本数据类型,也可以是应用数据类型。基本数据类型就是int、short 、byte、long等。引用数据类型,你可以就将其理解为类。
因此,对于你说的int,是基本数据类型;而方法中传入一个对象也是可以的,是引用数据类型。
③f(x);
其定义格式为
static void f(Letter y){ y.c = 'z'; }
而调用的时候,是这样写的
Letter x = new Letter() x.c = 'a'; print("1: x.c:" + x.c); f(x); print("2: x.c:" + x.c);
你调用这个方法的时候,传入的是x,也就是传入的是一个对象。也就是y代表的就是x
因此:y.c='Z'的本质就是x.c='z'
4、equals
Integer n1 = new Integer(20);Integer n2 = new Integer(20);System.out.println(n1.equals(n2));
equals方法比较的不是两个对象的内容,而是两个对象在内存中的地址,我们知道,两个对象内容可以相同,但是地址一定是不同的。
而这里,之所以相等,是因为Integer类中复写了equals方法,使得其不再是比较地址,而是比较内容。
对于
Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 60; System.out.println(v1.equals(v2));
由于Value是你自己定义的对象,由于你没有覆盖equals方法,所以比较的是地址。所以不相等。
热心网友 时间:2023-07-14 20:59
package console;
class Letter{
char c;//static char c; 2
}
public class PassObject{
static void f(Letter y){//对象是可以作为函数参数的
y.c = 'z';//没错,你说得很对
}
public static void main(String [] args){
Letter x = new Letter();
x.c = 'a';//是的,除非改成2
System.out.println("1: x.c:" + x.c);
f(x);
System.out.println("2: x.c:" + x.c);
}
}/* Output:
1: x.c: a
1: x.c: z
*/
package console;
class Value{
int i;
}
public class EqualsMethod2{
public static void main(String [] args){
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 60;
v1.i = 60;//等价写法
v2.i = 60;
System.out.println(v1.equals(v2));
}
}