Как правильно сравнить два Целых числа в Java?

Я думаю, что вы должны добавить куки после открытия URL

driver.get("http://www.facebook.com")
for f in files:
    cookies = pickle.load(open(f, "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)
.
196
задан shmosel 1 September 2017 в 08:00
поделиться

3 ответа

Поскольку comparaison метод должен быть сделан на основе интервала типа (x == y) или Целое число класса (x.equals (y)) с правильным оператором

public class Example {

    public static void main(String[] args) {
     int[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};

        for(int j=1; j<arr.length-1; j++)
            if((arr[j-1]!=arr[j]) && (arr[j]!=arr[j+1])) 
                System.out.println("int>"+arr[j]);


    Integer[] I_arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};

        for(int j=1; j<I_arr.length-1; j++)
            if((!I_arr[j-1].equals(I_arr[j])) && (!I_arr[j].equals(I_arr[j+1]))) 
                System.out.println("Interger>"+I_arr[j]);
    }
}
0
ответ дан 23 November 2019 в 05:18
поделиться

Нет, == между Integer, Long и т. Д. Будет проверять ссылочное равенство - то есть

Integer x = ...;
Integer y = ...;

System.out.println(x == y);

проверяет, соответствуют ли x и y относятся к тому же объекту , а не к равным объектам.

Таким образом,

Integer x = new Integer(10);
Integer y = new Integer(10);

System.out.println(x == y);

гарантированно напечатает false . Интернирование «маленьких» значений, запакованных автоматически, может привести к сложным результатам:

Integer x = 10;
Integer y = 10;

System.out.println(x == y);

Это напечатает true из-за правил упаковки ( раздел 5.1.7 JLS ). По-прежнему используется ссылочное равенство, но на самом деле ссылки равны .

Если значение p, помещенное в рамку, является целочисленным литералом типа int между -128 и 127 включительно (§3.10.1), или логический литерал true или false (§3.10.3), или символьный литерал между '\ u0000' и '\ u007f' включительно (§3.10.4), тогда пусть a и b будут результатами любых двух боксов. преобразования p. Всегда бывает, что a == b.

Лично я бы использовал:

if (x.intValue() == y.intValue())

или

if (x.equals(y))

Как вы говорите, для любого сравнения между типом оболочки ( Integer , Long и т. Д.) И числового типа ( int , long и т. Д.), Значение типа оболочки unboxed , и тест применяется к задействованным примитивным значениям. .

Это происходит как часть продвижения двоичных чисел ( раздел 5.6.2 JLS ). Посмотрите документацию каждого оператора, чтобы узнать, применяется ли она. Например, из документации для == и ! = ( JLS 15.21.1 ):

Если операнды равенства оба оператора имеют числовой тип, или один имеет числовой тип, а другой конвертируется (§5.1.8) в числовой тип, двоичное числовое продвижение выполняется для операндов (§5.6.2).

и для <, <= , > и > = ( JLS 15.20.1 )

Тип каждого из операндов числовой оператор сравнения должен быть тип, который может быть преобразован (§5.1.8) в примитивный числовой тип или происходит ошибка времени компиляции. Двоичный числовое продвижение осуществляется на операнды (§5.6.2). Если продвигаемый тип операндов - int или long, тогда целочисленное сравнение со знаком выполнено; если этот продвигаемый тип float или double, затем с плавающей точкой выполняется сравнение.

Обратите внимание, что все это не рассматривается как часть ситуации, когда ни один тип не является числовым.

278
ответ дан 23 November 2019 в 05:18
поделиться

== по-прежнему будет проверять равенство объектов. Однако легко обмануть себя:

Integer a = 10;
Integer b = 10;

System.out.println(a == b); //prints true

Integer c = new Integer(10);
Integer d = new Integer(10);

System.out.println(c == d); //prints false

Ваши примеры с неравенствами будут работать, поскольку они не определены для объектов. Однако при сравнении == равенство объектов все равно будет проверяться. В этом случае, когда вы инициализируете объекты из упакованного примитива, используется один и тот же объект (как для a, так и для b). Это нормальная оптимизация, поскольку классы примитивных блоков неизменяемы.

41
ответ дан 23 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: