我有这么简单的代码:
import java.util.ArrayList;
import java.util.List;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
Integer max = 2324;
List<Integer> indexes = new ArrayList<Integer>();
for (int e = 0; e < tab.length; e++) {
if (tab[e] == max) {
indexes.add(new Integer(e));
System.out.println("Found max");
}
}
}
}
这里的主要问题是我想找到tab
中max
值所在的每个索引。现在,它不起作用 - 它甚至没有显示发现最大消息一次,虽然它应该做3次。那问题呢?
好的,这终于奏效了,谢谢你们所有人:
public static void main(String[] args) {
Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
Integer max = 2324;
List<Integer> indexes = new ArrayList<Integer>();
for (int e = 0; e < tab.length; e++) {
if (tab[e].intValue() == max.intValue()) {
indexes.add(Integer.valueOf(e));
System.out.println("Found max");
}
}
}
答案 0 :(得分:9)
更改
Integer[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
到
int[] tab = {2324,1,2,2324,3,45,1,5,0,9,13,2324,1,3,9,8,4,2,1};
仅对从-128到127的值预先调用 Integer
个对象。
如果您想留下Integer
,可以更改
if (tab[e] == max) {
到
if (tab[e].equals(max)) {
因为它将检查对象是否相等,而不是引用相等。
答案 1 :(得分:3)
那是因为您要与==
进行比较,而不是equals
。
答案 2 :(得分:3)
您正在使用==
运算符,它不是原始int,而是类Integer
的实例。基本上,您正在比较两个对象的引用,这两个对象是不同的。尝试使用:
if(tab[e].equals(max))
答案 3 :(得分:2)
您遇到的基本问题是您使用的是Integer
,而不是int
一个区别是,Integer
是一个对象==
,它将对两个不同对象的引用进行比较。 (不是那些对象的内容)
我建议你使用像int
这样的原语而不是你可以使用的对象。
答案 4 :(得分:2)
您只能将原始值与==
进行比较。由于Integer是一个对象,因此将tab[e] == max
更改为tab[e].equals(max)
。
另请阅读:Java: int vs integer
答案 5 :(得分:2)
JVM正在缓存Integer值。
==
仅适用于-128到127之间的数字
请参阅此处的说明:http://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching
答案 6 :(得分:1)
答案 7 :(得分:1)
试试这个:
if (tab[e].intValue() == max.intValue()) {
或
if (tab[e].intValue() == max) {
如果您使用的是Integer对象而不是原始int,那么使用比较运算符(如==),至少一个操作数应该是原始的(其他操作数将被隐式转换)。
或者您应该使用equals
方法进行平等