中易网

Java方法调用别名与内存分配问题

答案:3  悬赏:0  
解决时间 2021-12-21 21:36
刚学Java不久,遇到几个问题,想不明白,请教各位大大,见笑了!
classs Letter{
char c;
}
public class PassObject{
static void f(Letter y){
y.c = 'z';
}
public static void main(String [] args){
Letter x = new Letter()
x.c = 'a';
print("1: x.c:" + x.c);
f(x);
print("2: x.c:" + x.c);
}
}
________________________________________________
public class EqualsMethod{
public static void main(String [] args){
Integer n1 = new Integer(20);
Integer n2 = new Integer(20);
System.out.println(n1.equals(n2));
}
}
________________________________________________
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;
System.out.println(v1.equals(v2));
}
}
________________________________________________
我的疑惑:
在第一段代码中
①对"c"的调用是不是一定要采用*.c的方式;
②方法f(Letter y)的参数列表是什么意思?我只明白f(int y),表示可以传一个变量一进来,且类型为int类型,可是这里Letter为一个类,我就不明白了;
③f(x);语句我不明白,此处"x"为一个对象引用,将他传入方法f()里,那么方法f()是不是就变成x.c = 'z'这样了呢?
在第二段代码中
我很容易理解“n1.equals(n2)”代表的是比较n1与n2的实际内容的值,而非引用地址。
在第三段代码中
我就不明白了,为什么不想等了呢?
________________________________________________
希望有大大能帮我分析一下 第一段代码 以及 第三段代码的方法调用及赋值是怎样进行的,以及他们的内存分配是怎样的。
阿莉丫哆菓咋一玛斯!!!
最佳答案
①对"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方法,所以比较的是地址。所以不相等。
全部回答
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);     } }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));     } }

method参数letter 是指的传入一个类型为letter的参数x

letter在最上方已经声明,是一个类

而method本身声明为静态static,所以可以直接调用,完整的是passobject.method(y)

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
疏烟的意思是什么?疏烟的释义是什么啊?
虑祸的意思是什么啊?请解释下!
翻译句子Itisgreattobeknownforyourhonesty
“他们下班了”英语怎么说?
直端的意思是什么?直端的释义是什么啊?
想买一个五百以下的游戏耳机求推荐个性价比高
跺脚的意思是什么啊?请解释下!
古烈的意思是什么?古烈的释义是什么啊?
写一个含复指主语的句子
精细化工概论黄肖容徐卡秋答案跪求电子版答案
每当喝咖啡,奶茶的心口就闷闷的很不舒服,请
探卒的意思是什么啊?请解释下!
耒阳燃气营业厅怎么去啊,有事要去办理
如何短期内了解公共基础知识
(营销与策划)和(传媒策划与管理)哪个专业
推荐资讯
危台的意思是什么?危台的释义是什么啊?
中外合作大学怎么样
游戏王编号为15AX的卡片在15周年系列的哪个卡
一份汉堡十六元第二份半价如果要买三份商家会
独木舟的意思是什么?独木舟的释义是什么啊?
文诌的意思是什么?文诌的释义是什么啊?
后八轮,370马力的满载,矿区全程上坡一公里
言行不貳的意思是什么?言行不貳的释义是什么
在一个正方形里面画一个最大的圆,这个圆的周
饭店地理位置不太好怎么干好
读一学期融通班多少钱
珊瑚翹的意思是什么?珊瑚翹的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?