@WannaCreative

Где ошибка в коде Java?

Не могу найти ошибку.
Должна выводится надпись, но это не работает.
package com.examplepackage;

import java.util.Scanner;

public class Main{
    public static void main(String[]args){
        String myPass = new String("supermegalogic");
        System.out.print("Hello! Welcome to admin panel! \n");
        System.out.print("First of all, type down your password \n");
        Scanner scn = new Scanner(System.in);
        String typepass = scn.nextLine();
        if (typepass == myPass){
            System.out.print("YOU HAVE JUST CONNECTED.");
        }
    }
}
  • Вопрос задан
  • 898 просмотров
Решения вопроса 1
@asurkis
Нельзя выполнять проверку с помощью оператора "==", так как он сравнивает ссылки, а не сами объекты. Правильным условием было бы
if (myPass.equals(typepass)) { /* ... */ }

Точнее сказать, оператор "==" сравнивает простые типы, т.е. byte, short, int, long, float, double, char, а также ссылки, а для объектов нужно применять функцию equals, определённую в классе java.lang.Object, от которого наследуются все остальные классы

Также стоит помнить, что классы-обёртки над простыми типами не являются простыми (т.е. объекты типа Integer (а также Byte, Short, Long, Char, Float и Double) -- это именно экземпляры класса, которые надо сравнивать на равенство с помощью equals)

Кстати, вместо new String("supermegalogic")
можно написать "supermegalogic"
Так как при явном вызове конструктора на самом деле создаётся 2 эквивалентных объекта, а также явный вызов немного ухудшает читаемость кода
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Не могу найти ошибку.

Надо было отлаживать, хотя бы проверяя каждую конструкцию методом тыка, это бы дало понять, что проблема в условии.
И еще, вставлю "5 копеек", замените
String myPass = new String("supermegalogic");
String myPass = "supermegalogic";
Это уже не влияет, но код лаконичнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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