gpt4 book ai didi

java - 这个关键字及其工作原理

转载 作者:行者123 更新时间:2023-12-01 07:51:28 25 4
gpt4 key购买 nike

我有一个关于方法中 this 和变量作用域的关键字的问题。一般来说,我知道如何使用这个关键字,但是当在方法 balance 中观察到以下所有 3 个选项的相同结果时,我感到困惑。问题是,选项的正确实现是什么以及为什么它以相同的结果处理所有选项。是不是意味着如果方法balance中没有局部变量,这个关键字就会被忽略?

非常感谢!

选项#1

public int balance(int balance) {
this.age = this.age + balance;
return age;
}

选项#2

public int balance(int balance) {
age = age + balance;
return age;
}

选项#3

public int balance(int balance) {
age = age + balance;
return this.age;
}

代码

package com;
public class Elephant {

private String name;
private int age;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}

public int balance(int balance) {
age = age + balance;
return age;
}

public int getAge() {
return age;
}

public Elephant(String name, int age) {
this.name = name;
if (age > 0) {
this.age = age;
}
}
}


package com;

import java.util.Scanner;

public class MainClass {

public static void main(String arg[]) {
Elephant e1 = new Elephant("Elephant1: ", 7);
System.out.printf("Elephant name: %s age: %s \n", e1.getName(), e1.getAge());
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
e1.balance(i);
System.out.printf("Entered deposit for e1: %d \n", i);
System.out.printf("Balance for e1: %s", e1.getAge());
}
}

所有 3 个选项的结果都是相同的:大象名称:Elephant1:年龄:711输入 e1 存款:11e1 余额:18

最佳答案

除了需要从实例方法内部传递或存储对对象的引用的情况之外,当解析不合格名称需要应用消歧规则时,您还需要关键字 this

例如,此代码需要它:

public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}

标识符age可以引用成员字段age或参数age。编译器应用参数和局部变量“影子”具有相同名称的字段的规则,以消除歧义。这就是为什么你必须在作业中为 age 加上 this 前缀;否则,该字段将不会被分配。

另一方面,您的 balance 方法根本不需要关键字 this,因为它没有不明确的名称解析。

关于java - 这个关键字及其工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com