2017-04-09 54 views
-1

找不到发生了什么的明确描述,所以我想我会把它带到社区。原始类变量的算术操作

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是实例化的“和”变量为空时是空的?

在此先感谢!

+1

参见[*§4.12.5。变量的初始值*](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5)。 – trashgod

+1

“空”或更确切地说它们是0. Java原语从不“空”,它们被初始化为0(或false)。引用可以是'null',它也不是真的“空”,null是一个值。 – markspace

+1

重申什么是空格说的。 Java中没有“空”变量或字段。每个变量或字段都有一个*确定的值*,任何时候您都可以观察它。该值是明确初始化(例如'int foo = 42;')或隐式*默认初始化*的结果。从你的心智模型和你的词汇中删除“空变量”! –

回答

1
Temp obj = new Temp(); // creates an instance of object type Temp 

这里,数据成员i,jsum被初始化为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 

注意,温度对象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() 

    } 
} 
0

难道是因为在实例化 期间,'sum'变量为空,这两个整数i和j都是空的吗?

是,i+j在对象实例化时被赋予'sum'。默认情况下,当您不分配值时,java将0赋值为int值。

您需要通过直接为其分配值来更新sum变量。

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

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

public class Temp { 

    static int i; 
    int j; 

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

然后打印总和:

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

当您创建另一个类,这将是由主法

数值数据字段设置为零

字符字段设置为Unicode \u0000

布尔字段设置使用到false

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