Comparando a referência de argumentos da linha de comando, retorne false, enquanto a matriz de String retorna true [duplicate]

Esta pergunta já tem uma resposta aqui:

Como eu comparo strings em Java? 23 respostas

Atualmente, estou trabalhando com manipulação de String e, durante a demonstração, encontrei algum comportamento diferente.

Abaixo está o meu código.

public class HelloWorld{

 public static void main(String []args){
    String str1 = "Hello";
    String str2 = "Hello";
    String str3 = new String("Hello");

    String strArray[] = {"Hello","Hello"};
    String strArray1[] = new String[] {"Hello","Hello"};

    System.out.println("str1==str2::  "+(str1==str2));
    System.out.println("str1==str3::  "+(str1==str3));

    System.out.println("strArray[0]==strArray[1]::  "+(strArray[0]==strArray[1]));
    System.out.println("str1==strArray[1]::  "+(str1==strArray[1]));

    System.out.println("strArray1[0]==strArray1[1]::  "+(strArray1[0]==strArray1[1]));
    System.out.println("str1==strArray1[1]::  "+(str1==strArray1[1]));

    System.out.println("args[0]==args[1]::  "+(args[0]==args[1]));
 }

}

E fora do código acima é. Estou executando código passando argumentos de linha de comando.

java HelloWorld Hello Hello

str1 == str2 :: true
str1 == str3 :: false
strArray [0] == strArray [1] :: true
str1 == strArray [1] :: true
strArray1 [0] == strArray1 [1] :: true
str1 == strArray1 [1] :: true
args [0] == args [1] :: false

Aqui eu tenho duas consultas.

se eu comparar a referência da String str1 == str3, ela retornará false porque str3 é criada usandonova String para que não residam no pool de String, então comostr1 == strArray1 [1] retorna verdadeiro??

strArray [0] == strArray [1] retornará true, strArray1 [0] == strArray1 [1] também retornará true, então por que o argumento da linha de comandoargs [0] == args [1] retornam false??

Por favor, guie.

questionAnswers(2)

yourAnswerToTheQuestion