[英]Stream different data types
我正在研究Streams API。
第一行中2发生了什么? 它被视为什么数据类型? 为什么这不是真的 ?
System.out.println(Stream.of("hi", "there",2).anyMatch(i->i=="2"));
这个问题的第二部分是为什么下面的代码不能编译( 2不在引号中 )?
System.out.println(Stream.of("hi", "there",2).anyMatch(i->i==2));
在第一个片段中,您将创建一个Object
Stream
。 2
元素是一个Integer
,因此将它与String
“2”进行比较会返回false。
在第二个片段中,您无法将任意Object与int
2进行比较,因为没有从Object
到2
转换。
要使第一个片段返回true,您必须将Stream的最后一个元素更改为String
(并且还使用equals
而不是==
以便不依赖于String
池):
System.out.println(Stream.of("hi", "there", "2").anyMatch(i->i.equals("2")));
可以使用equals
而不是==
来修复第二个片段,因为任何Object
存在equals
:
System.out.println(Stream.of("hi", "there",2).anyMatch(i->i.equals(2)));
你应该使用:
System.out.println(Stream.of("hi", "there",2).anyMatch(i->i.equals(2)));
这样做的原因是你正在做的anyMatch
的比较是i
,它是一个Object
(来自流)并且与int
不兼容。
另请注意,第一部分成功编译,因为您将整数(对象)与对象字符串"2"
进行比较,因此返回false。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.