小编Nem*_*ara的帖子

为什么 StringTokenizer 在 while 循环和 for 循环中使用时会给出不同的输出

我曾经StringTokenizer获取字符串的标记。但是当我尝试StringTokenizer使用 for 循环和 while 循环打印其中的所有标记时,我得到了两个不同的输出。

String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 for 循环打印所有令牌时

for (int i=0;i<stringTokenizer.countTokens();i++)
  System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)

输出

她是个有魅力的女孩

当我尝试使用 while 循环打印所有令牌时

while (stringTokenizer.hasMoreElements())
  System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)

输出

她是个有魅力的女孩

她不是吗?

我想知道为什么 while 循环给出了预期的两个标记,而 for 循环没有给出两个标记。

java stringtokenizer

5
推荐指数
1
解决办法
85
查看次数

Lambda 中的变量捕获

我想不通为什么在 lambda 表达式中捕获的变量是最终的或有效的最终变量。我看了这个问题,真的没有得到答案。

这个变量捕获是什么?

当我为我的问题搜索解决方案时,我读到这些变量是最终的,因为并发问题。但是对于这种情况,我们为什么不能用reentrant lock对象锁定 lambda 中的任务代码。

public class Lambda {

  private int instance=0;

  public void m(int i,String s,Integer integer,Employee employee) {

    ActionListener actionListener = (event) -> {
      System.out.println(i);
      System.out.println(s);
      System.out.println(integer);
      System.out.println(employee.getI());
      this.instance++;
      employee.setI(4);
      integer++;//error
      s="fghj";//error
      i++;//error
    };
  }

}

Run Code Online (Sandbox Code Playgroud)

在这个特定的代码中,我想知道为什么最后三个语句给出错误的原因,以及为什么我们要变异,Employee因为它是一个局部变量。(Employee 只是一个带有 getter 和 setter 的类int i。)

我也想知道为什么我们也可以变异this.instance

我感谢对我上面提到的所有事实的完整详细回答。

java lambda final

-1
推荐指数
1
解决办法
213
查看次数

Java中'.class'的用途是什么

其实这是一个三部分的问题。

1我想知道我们在什么场合使用关键字class。很明显,我们用它来定义一个类。但是SomeClass.class在表达式中使用的目的是什么?

2我在维基百科上读到它可以用来代替表达式new SomeClass().getClass()。但是,当我们已经可以使用new SomeClass().getClass()表达式时,为什么还需要它 呢?

3我们什么时候需要SomeClass.class在语句中使用这个表达式?

我指的是匿名内部类,我想到我们不能getClass()在静态方法中使用该方法。

以下斯蒂芬的回答给出了这个问题的确切唯一答案。

java class

-2
推荐指数
1
解决办法
73
查看次数

标签 统计

java ×3

class ×1

final ×1

lambda ×1

stringtokenizer ×1