我曾经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 循环没有给出两个标记。
我想不通为什么在 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
。
我感谢对我上面提到的所有事实的完整详细回答。
其实这是一个三部分的问题。
1我想知道我们在什么场合使用关键字class
。很明显,我们用它来定义一个类。但是SomeClass.class
在表达式中使用的目的是什么?
2我在维基百科上读到它可以用来代替表达式new SomeClass().getClass()
。但是,当我们已经可以使用new SomeClass().getClass()
表达式时,为什么还需要它 呢?
3我们什么时候需要SomeClass.class
在语句中使用这个表达式?
我指的是匿名内部类,我想到我们不能getClass()
在静态方法中使用该方法。
以下斯蒂芬的回答给出了这个问题的确切唯一答案。