Java 在Long类型的ArrayList上使用indexOf返回-1,尽管列表中存在对象
我试图检索存储在ArrayList中的某个长值的索引。但现在发生的是: dex被赋值为-1,我理解这意味着该对象不存在于该arraylist中。但事实上,确实如此。我是这样知道的: 因此,应该为dex赋值为0 我在哪里搞砸了Java 在Long类型的ArrayList上使用indexOf返回-1,尽管列表中存在对象,java,android,arraylist,Java,Android,Arraylist,我试图检索存储在ArrayList中的某个长值的索引。但现在发生的是: dex被赋值为-1,我理解这意味着该对象不存在于该arraylist中。但事实上,确实如此。我是这样知道的: 因此,应该为dex赋值为0 我在哪里搞砸了 编辑:nums也是Long类型的数组列表。它做什么nums.get(0)是一个java.lang.String,正如您在屏幕截图中指出的,而longList.get(0)是一个java.lang.Long 它们不是同一个对象,实际上nums.get(0).equals(
编辑:
nums
也是Long类型的数组列表。它做什么nums.get(0)
是一个java.lang.String
,正如您在屏幕截图中指出的,而longList.get(0)
是一个java.lang.Long
它们不是同一个对象,实际上
nums.get(0).equals(longList.get(0))==false
。您必须将字符串
转换为Long
(例如通过Long.parseLong
),然后在longList
中搜索结果值。它做什么nums.get(0)
是一个java.lang.String
,正如您在屏幕截图中指出的,而longList.get(0)
是一个java.lang.Long
它们不是同一个对象,实际上
nums.get(0).equals(longList.get(0))==false
。您必须将字符串
转换为Long
(例如通过Long.parseLong
),然后在longList
中搜索结果值,以确定哪种类型是nums.get()
。如果它不返回长类型。您可以将其转换为长字体。但这并不是一个好的选择。您还可以使用WrapperclassLong
及其方法Long.parseLong来确定哪种类型是nums.get()
。如果它不返回长类型。您可以将其转换为长字体。但这并不是一个好的选择。您还可以使用WrapperclassLong
及其方法Long.parseLong
nums是String类型对象的ArrayList,而longList是Long类型对象的ArrayList。因此,语句longList.indexOf(nums.get(i))
将比较一个字符串对象和一个它永远找不到的长对象
尝试将字符串转换为长字符串,例如int-dex=longList.indexOf(Long.valueOf(nums.get(i))代码>nums是String类型对象的ArrayList,而longList是Long类型对象的ArrayList。因此,语句longList.indexOf(nums.get(i))
将比较一个字符串对象和一个它永远找不到的长对象
尝试将字符串转换为长字符串,例如int-dex=longList.indexOf(Long.valueOf(nums.get(i))
nums
也是一个Long类型的arraylist。然后,在代码中的某个地方,通过反射、显式强制转换或原始类型打破了类型安全性。否则,nums.add(“1008”)
将引发编译错误。请注意,nums
在运行时不能是ArrayList
。Java有类型擦除,运行时ArrayList
始终是ArrayList
。泛型是一种防止您遇到这种情况的方法:在使用泛型容器时保持类型安全。好的,谢谢nums=newarraylist(Arrays.asList(TextUtils.split(numstring,“”))我猜是什么导致了这个问题numString
以字符串格式存储所有长值,通过这条特殊语句,我试图将字符串分成不同的长元素,并将其存储在nums
——这是long类型。现在,我刚刚将nums
更改为string类型,并使用Long.ParseLong。然后答案是raw类型。实际上,您从Arrays.asList
返回的ArrayList
创建了一个新的ArrayList()
,因为TextUtils.split
返回一个String[]
nums
也是一个Long类型的ArrayList。然后,在代码中的某个地方,通过反射、显式转换或原始类型破坏了类型安全性。否则,nums.add(“1008”)
将引发编译错误。请注意,nums
在运行时不能是ArrayList
。Java有类型擦除,运行时ArrayList
始终是ArrayList
。泛型是一种防止您遇到这种情况的方法:在使用泛型容器时保持类型安全。好的,谢谢nums=newarraylist(Arrays.asList(TextUtils.split(numstring,“”))我猜是什么导致了这个问题numString
以字符串格式存储所有长值,通过这条特殊语句,我试图将字符串分成不同的长元素,并将其存储在nums
——这是long类型。现在,我刚刚将nums
更改为string类型,并使用Long.ParseLong。然后答案是raw类型。实际上,您可以从Arrays.asList
返回的ArrayList
创建一个新的ArrayList()
,因为TextUtils.split
返回一个字符串[]
。