No primeiro caso, o método toUpperCase() verifica se há caracteres que precisam ser modificados na String, como ela já está toda em maiuscula, o método retorna a mesma String.
No segundo caso, criar uma String através do construtor, força a criação de uma cópia da instância do objeto String passado como parâmetro, o que a torna diferente de uma criação literal.
Importante salientar que com o operador == para comparação de objetos, você está comparando as referências e não o valor dos objetos(que deve ser feito com o método equals()). Sendo assim, como o método toUpperCase retorna o mesmo objeto, então as referências estão apontando para um só, logo, o retorno é ‘true’, e na segunda comparação como o construtor cria uma nova instância do objeto, as referências não estão apontando para o mesmo objeto, logo, o resultado é false.