2016-04-25 43 views
0

我正在评论我在互联网上找到的程序,我试图弄清楚它是如何工作的,但是我找不到任何有关这个功能的东西可以帮助我。

public static double regress(double x, ArrayList<Double> terms) { 
    double a = 0.0; 
    int exp = 0; 
    Iterator<Double> i$ = terms.iterator(); 
    while (i$.hasNext()) { 
     double term = i$.next(); 
     a += term * Math.pow(x, exp); 
     ++exp; 
    } 
    return a; 
} 

我知道的方法是在一个ArrayList来计算a值迭代,但它是什么意思这条线Iterator<Double> i$ = terms.iterator();?更具体地说,这个符号$之后使用了什么变量i

+1

'$'意味着什么具体的,只是一个字符在变量 – Andrew

+0

其分毫......他们可以用它为一些独特的识别... –

+0

你为什么不尝试用repalacing更有意义的I $。 – Priyamal

回答

0

i$只是您的变量的名字的确的$是一个字符,您可以使用它来定义Java标识符的名称。要检查是否字符被允许(在Java标识符中除首字符外),可以使用Character.isJavaIdentifierPart(char),如果你有$测试它,你会得到true如在Javadoc中提到:

字符可能是Java标识符的一部分,如果任何以下 的为真:

  • 它是一个字母

  • 它是货币符号(例如{@code '$'})

  • 它被连接标点符号字符(例如{@code '_'})

  • 它是一个数字

  • 它是一个数字的字母(如罗马数字字符)

  • 它是一个组合标记

  • 它是一个非空格标记

  • {@code isIdentifierIgnorable}返回{@code true}用于字符

0

$没有任何特殊的含义。在你提到的一个迭代器对象列表中,术语被创建,然后用它来访问它的所有元素。我对变量名称只是一个奇怪的选择。

0

$只是标识符的一部分,即变量的名称。您只能使用少数特殊符号作为标识符的一部分。 $是其中之一。 (实际上所有的货币符号都是允许的)。

它没有什么特别的含义。

但是编译器使用它的一个地方是使用内部类。然后它用来将Inner类的名称与主类分开。
例如:MyClass$InnerClass1.class

0

这看起来像是由反编译器“写”的代码。不要指望反编译的代码特别可读。对于什么是值得的,一个(人)的Java程序员可能会编写代码在你的问题是:

public static double regress(double x, ArrayList<Double> terms) { 
    double a = 0.0; 
    int exp = 0; 
    for (double term : terms()) { 
     a += term * Math.pow(x, exp); 
     ++exp; 
    } 
    return a; 
} 

$字符是一个Java标识符的法律性质,除了它是非正式地保留使用编译器,源代码生成器和其他工具。强烈建议不要在人类书面代码中使用$。 作为JLS 3.8说:

$符号应该仅在机械上生成的源代码使用,或者很少,访问遗留系统预先存在的名称。

如果您不确定地使用$,您可能会遇到麻烦。该字符用于内部类的合成名称,以及内部类在封闭范围内引用“有效最终”局部变量时使用的合成变量。如果您声明了自己的$变量,那么它们可能会与编译器的使用冲突,并且结果将不确定。

0

$是在标识符使用有效符号;这意味着没什么特别的

然而,请参阅JLS Section 3.8,这表明$不应典型地在标识符用于:

$符号应当只用于在机械上生成的源代码或,很少,访问预先存在的名称在传统系统上。

相关问题