JAVA - void和boolean方法有什么区别?

时间:2012-07-06 22:09:29

标签: java methods boolean void

我是JAVA的新手。我正在JAVA中编写一个包装库,以便使用类似Basic的语言提供一些函数。

当我注意到某些代码没有在JAVA库中执行时,虽然编译器没有抱怨(使用Eclipse),但我在某个时刻得到了库存。我最终通过更换代码解决了这个问题:

public void VideoQuality(int vQuality) //did not work 

进入

public boolean VideoQuality(int vQuality) //works

以下是完整的代码片段:

 public void VideoQuality(int vQuality) //did not work
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
         }  

public boolean VideoQuality(int vQuality) //works
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
        return true;
          }  

我认为 void 对应于Visual Basic中的sub,而 boolean 对应于一个函数。

我发现奇怪的是,以下代码使用 void

public void setVolume(float leftVolume,float rightVolume)
      {
          vitamioExt.setVolume(leftVolume, rightVolume);
      }

我肯定错过了一些非常明显的东西,但是当布尔 - 代码工作时,我无法理解为什么 void -code不起作用。

也许这取决于我如何调用代码?

任何可以点灯的人?

编辑:澄清什么不起作用,我的意思是代码:

vitamioExt.setVideoQuality(vidQuality);

没有在void-snippet中执行。

EDIT2:vidQuality在代码的不同部分声明。我刚刚发布了片段,因为问题与这些片段有关,而且变量都在运行。

EDIT3:最后,我想我必须错误地调用void-snippet,尽管编译器没有编译。在任何一种情况下,两个片段都应该执行,虽然当然void-snippet是正确的,因为我没想到返回值。

2 个答案:

答案 0 :(得分:8)

之间的唯一区别
public void VideoQuality(int vQuality)

public boolean VideoQuality(int vQuality)

是前者不返回值,后者确实(特别是boolean值)。这就是差异的全部程度。

这意味着,例如voidVideoQuality

boolean x = VideoQuality(10); // Will not compile
VideoQuality(10);             // Will compile

...因为您无法将void函数的结果分配给变量。

如果您使用的booleanVideoQuality

boolean x = VideoQuality(10); // Will compile
VideoQuality(10);             // Will compile

...因为虽然你可以分配一个将boolean返回给boolean变量的函数的结果,但你没有到。如果您愿意,可以忽略返回值。 (通常这不是好习惯,但有时候也没问题。)

  

我认为void对应于Visual Basic中的sub,而boolean对应于一个函数。

松散地说,是的。 void表示该函数没有返回值,如VB中的Sub。其他任何内容(booleanintFoo,等等)表示A)函数有返回值,B)它是给定类型。这就像VB中的Function

答案 1 :(得分:0)

函数使用类型声明,与常规变量非常相似,但函数声明的类型称为返回类型,它表示“此函数在调用时将返回为布尔值”。例如:

boolean alive = true;
boolean isDogAlive() {
    return alive;
}

如果调用此函数,它将返回true,因此您可以说

if (! isDogAlive()) { // if it returns false
    System.out.println("Oh no!");
} else {
    System.out.println("Yay!");
}

如果函数没有返回任何内容,则声明 void 。除非您确实需要获取true / false值,否则您不需要为方法提供布尔返回类型。虚空应该适合你的情况。