流式传输不同的数据

alw*_*ous 4 java java-8 java-stream

我正在研究Streams API.

第一行中2发生了什么?它被视为什么数据类型?为什么这不是真的

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i=="2"));
Run Code Online (Sandbox Code Playgroud)

这个问题的第二部分是为什么下面的代码不能编译(2不在引号中)?

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i==2));
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 7

在第一个片段,你正在创建一个StreamObject秒.所述2元件是一个Integer,因此它比较到String"2",返回false.

在第二个片段中,您无法将任意对象与int2 进行比较,因为没有转换Object2.

要使第一个片段返回true,您必须将Stream的最后一个元素更改为a String(并且还使用equals而不是==为了不依赖于String池):

System.out.println(Stream.of("hi", "there", "2").anyMatch(i->i.equals("2")));
Run Code Online (Sandbox Code Playgroud)

第二个片段可以通过使用equals而不是==因为equals任何存在而修复Object:

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i.equals(2)));
Run Code Online (Sandbox Code Playgroud)