Почему когда я написал boolean и задал ему условие при котором верно будет или 1 , или 2 , или ничего, когда вводится protocol все мои переменные которые сравнивают начало URL-адреса все они принимают значение true (все проблемы происходят только со "startsWith") (16 и 17 строчка)
import java.util.*;
 class OSNOVA {
    public static void main(String[] args) {
        String[] urls = {"https://javarush.com", "https://google.com", "http://wikipedia.org", "facebook.com", "https://instagram", "codegym.cc"};
        for (String url : urls) {
            String protocol = checkProtocol(url);
            String domain = checkDomain(url);


            System.out.println("У URL-адреса - " + url + ", сетевой протокол - " + protocol + ", домен - " + domain);
        }
    }

    public static String checkProtocol(String url) {
        String str = " ";
        boolean a = url.startsWith("https");
        boolean aa = url.startsWith("http");
        boolean b = a == false & aa == false;
    if(a == true | aa == true) {
        if (a == true) {
            str = "https";
        }
        else {
            str = "http";
        }
    } else if (b) {
        str = "неизвестный";
    }
       return str;
    }

    public static String checkDomain(String url) {
        String str = " " ;
        boolean a = url.endsWith("org");
        boolean aa = url.endsWith("com");
        boolean aaa = url.endsWith("ru");
        boolean aaaa = url.endsWith("net");
        boolean b = a==false & aa == false & aaa==false & aaaa==false;
        boolean bb = a==true | aa == true | aaa==true | aaaa==true;
        if (bb==true) {
            if (a==true)
                str = "org";
            else if (aa == true) {
                str = "com";
            } else if (aaa==true) {
                str = "ru";
            }
            else if(aaaa==true){
                str="net";
            }

        }
        else
            str ="неизвестный";
        return str;
    }
}
Я захотел посмотреть на то как себя будут вести переменные типа boolean но уже в другом коде , в итоге он там так же принимает только значения true и делает не правильный вывод на экран (7 и 8 строчка)
import java.util.*;
public class OSNOVA1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String strs = " " ;
        boolean a = str.startsWith("a");
        boolean aa = str.startsWith("aa");
        boolean aaa = a == true | aa==true;
        if (aaa){
            if (a==true){
                strs = str;
                System.out.println(strs);
            } else if (aa==true) {
                strs = str;
                System.out.println("Вторая попытка "+strs);
            }
        }
        else
            System.out.println("вы не угадали ");

    }
}
Можете пожалуйста объяснить почему так происходит или сказать может где допущена ошибка в коде из-за которой происходят эти ошибки Метод использовался с 5 лекции 10 уровня - вот вид который показали
boolean startsWith(String prefix)