如果语句Object boolean不起作用

时间:2017-02-14 10:16:29

标签: java oop object boolean

我正在尝试使用另一个类中的另一个对象检查一个人的年龄,由于某种原因 areThey 布尔值无论如何都返回false。我实现的以下代码是__

  public class main {    
    public static void main(String[] args){    
      Obj object = new Obj();    
      object.areTheyOldEnough();

      if(object.areTheyOldEnough() == true){
          System.out.println("They are old enough!");
      }else{
          System.out.println("They are not old enough!");
      }
    }
}

public class Obj {
    private int age = 15;
    private boolean areThey;

    public boolean areTheyOldEnough() {
        if (age > 12) {
            boolean areThey = true;
        }
        return areThey;    
    } 
} 

4 个答案:

答案 0 :(得分:4)

您的问题称为阴影;这里:

最内在声明:

if (age > 12) {
  boolean areThey = true;

完全错了,那应该是:

areThey = true;

代替。关键是:您要声明该名称的变量,并赋予该值true。但是当if-block被“留下”时,那个变量在空气中消失了......返回的是areThey类中字段 obj的值。而仍然的初始默认值为false

除此之外:命名是代码中的一个真正问题。使用A)符合java编码标准的名称;所以类名起始于UpperCase; B)意味着什么

换句话说:名称对象并不意味着什么(除了创建与java.lang.Object类名称的另一个名称冲突)。最好把它称为“testInstance”或类似的东西 - 如上所述:使用表示某些东西的名称。

答案 1 :(得分:0)

你有两个同名的布尔变量 - 一个是你在方法中设置的局部变量(在if块内),另一个是你要返回的实例变量。

您不需要任何布尔变量,只需写:

public boolean areTheyOldEnough() {
    return age > 12;
}

答案 2 :(得分:0)

你混合了场和局部变量的可见性

public class obj {

public int age = 15;
public boolean areThey; //initialized to false as default value for boolean

public boolean areTheyOldEnough() {
   if (age > 12) {
       boolean areThey = true; //create new local variable with the same name as field, 
                               // but visible just in scope of if-block
    }
    return areThey; // return value from field
}

答案 3 :(得分:0)

更正您的代码如下:

public class main {

public static void main(String[] args){

  obj Object = new obj();

  if(obj.areTheyOldEnough()){
      System.out.println("They are old enough!");
  } else{
      System.out.println("They are not old enough!");
  }
}

你的obj课程将是:

public class obj {
public int age = 15;
// it is not required, but if you need for other methods,
// you can define it
public boolean areThey;

public boolean areTheyOldEnough() {
    return age > 12;
    // or if you need set variable areThey, so use following codes
   /*
      areThey = age > 12;
      return areThey;
   */
}