【问题标题】:Arithmetic operation on primitive class variables [duplicate]原始类变量的算术运算
【发布时间】:2017-04-09 02:48:04
【问题描述】:

找不到对正在发生的事情的明确描述,所以我想把这个提交给社区。​​p>

public class Temp {
static int i;
int j;
int sum = i+j;
}


public class Main{
public static void main(String[] args){

Temp obj = new Temp();
obj.i = 1;
obj.j = 2;
System.out.println(obj.sum); //returns '0'

}}

是不是因为在实例化过程中整数i和j都是空的,所以'sum'变量是空的?

提前致谢!

【问题讨论】:

  • “空”或更准确地说它们是 0。Java 原语永远不会“空”,它们被初始化为 0(或 false)。引用可以是null,它也不是真正的“空”,null 是一个值。
  • 重申标记空间所说的内容。 Java 中没有“空”变量或字段之类的东西。每个变量或字段都有一个确定的值,你可以随时观察它。该值是明确初始化(例如int foo = 42;)或隐式默认初始化的结果。从你的心智模型和词汇中删除“空变量”!

标签: java class variables scope primitive


【解决方案1】:
Temp obj = new Temp(); // creates an instance of object type Temp

这里,数据成员ijsum被初始化为0

obj.i = 1; // assigns value of Temp data member, i to 1
obj.j = 2; // assigns value of Temp data member, j to 2

注意,Temp Object obj的数据成员sum的值仍然是0
要使sum = i + j,您需要在初始化ij 时将其初始化为i + j

只需编写obj.setSum() 方法来设置sumobj.getSum() 的值,然后检索它的更新值。

public class Temp {
    static int i;
    int j;
    int sum = i+j;

    public void setSum(){
        sum = i + j;
    }
    public int getSum(){
        return sum;
    }

}


public class Main{
    public static void main(String[] args){

    Temp obj = new Temp();
    obj.i = 1;
    obj.j = 2;
    obj.setSum();
    System.out.println(obj.sum); //OR obj.getSum()

    }
}

【讨论】:

    【解决方案2】:

    是不是因为整数 i 和 j 在实例化过程中都是空的 'sum' 变量是否为空?

    是的,当对象被实例化时,i+j 被分配给“sum”。默认情况下,当您不分配值时,java 会将 0 分配给 int 值。

    你需要更新sum变量,直接赋值给它。

    obj.i = 1;
    obj.j = 2;
    obj.sum = obj.i + obj.j.
    

    一种解决方法是在您的 Temp 类中创建一个 getter 方法,而不是变量 sum

    public class Temp {
    
        static int i;
        int j;
    
        public int getSum() {
            return i + j;
        }
    }
    

    然后打印总和:

    System.out.println(obj.getSum());
    

    【讨论】:

      【解决方案3】:

      当你创建另一个将被 main 方法使用的类时

      数字数据字段设置为零

      字符字段设置为 Unicode \u0000

      布尔字段设置为false

      作为对象引用的字段设置为null 或(空)例如String data fields

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        相关资源
        最近更新 更多