NextLine() não funciona?

Pessoal, boa tarde.

Eu sinceramente não consigo entender o motivo do método nextLine() não funcionar.

import java.util.Scanner;

class ScannerTest{

public static void main (String[] args){

  Scanner scan = new Scanner(System.in);
  System.out.print("Digite o 1° número: ");
  int num1 = scan.nextInt();
  System.out.print("Digite o 2° número: ");
  int num2 = scan.nextInt();		
  System.out.print("Digite o 3° número: ");
  String num3 = scan.nextLine();
  System.out.print("Digite o 4° número: ");
  String num4 = scan.nextLine();
  int soma = num1 + num2;
  String concat = num3 + num4;
  
  System.out.print("A soma é: " + soma + "\nA concatenação é: " + concat);

}
}

Na linha:

  System.out.print("Digite o 3° número: ");
  String num3 = scan.nextLine();

Ocorre que ele não posiciona para leitura, simplesmente parte logo para o próximo scan.nextLine(). Alguém saberia me ajudar?

Já se eu colocar os dois métodos nextLine() antes do nextInt(), funciona tudo perfeito, ou seja, se o código fosse:

import java.util.Scanner;

class ScannerTest{

public static void main (String[] args){

  Scanner scan = new Scanner(System.in);
  System.out.print("Digite o 3° número: ");
  String num3 = scan.nextLine();
  System.out.print("Digite o 4° número: ");
  String num4 = scan.nextLine();
  System.out.print("Digite o 1° número: ");
  int num1 = scan.nextInt();
  System.out.print("Digite o 2° número: ");
  int num2 = scan.nextInt();		
  int soma = num1 + num2;
  String concat = num3 + num4;
  
  System.out.print("A soma é: " + soma + "\nA concatenação é: " + concat);

}
}

Obrigado.

Uma outra dúvida, é possível alterar o nome de usuário aqui no GUJ (apelido)?

Essa é uma pegadinha clássica.
Todas as vezes que você utiliza um next[Int, Float, Long, etc], o que é lido é apenas a parte numérica contida na linha.
Acontece que o usuário digita o valor e pressiona a tecla “Enter”, certo?
O enter é interpretado como “\n”. Assim sendo, se o usuário digitou como segundo número o valor 10, o que está na linha digitada é 10\n.
Você lê o 10 quando invoca o scan.nextInt(); e deixa lá o \n.
Quando o sistema chega no scan.nextLine(); ele deveria esperar que o usuário pressionasse enter (\n), mas isso já está lá (lembra que você leu o 10 e deixou o \n para trás?). Logo, ele dará a impressão de não ter lido nada, quando, na verdade, ele já leu.
Como solucionar?
Sempre leia com nextLine() e faça a conversão utilizando as classes wrappers e os métodos de conversão de String para o tipo desejado.

Tenta falar com alguém da moderação, até onde lembro, não (teve um usuário, há vários anos, que tinha um nickname muito tosco e não conseguiu mudar).