Pool/Objetos String

Porque o resultado abaixo da false? Não deveria passar a mesma referência do value para a posição 0 dos arrays a e b e retornar true?

String value = "teste";
String[] a = new String[1];
String[] b = new String[1];
a[0] = value;
b[0] = value;
System.out.println(a == b);

se vc comparar a[0] == b[0] provavelmente vai retornar true

entretanto vc tem dois arrays diferentes. compara-los com operador == só vai mostrar que eles apontam para areas diferentes de memoria, o conteudo dos dois é irrelevante ( no caso o conteudo contem outros objetos, porem ainda assim são diferentes )

se isso fosse verdade, vc só precisaria fazer a[0]= value;

Nesse caso você está comparando dois objetos e não dois valores

.
Quando você usa new, esta sendo criado um objeto no heap. As variáveis possuem a referência do objeto que está no heap. Variável a você criou um objeto(array) e para variável b você criou outro objeto(array), portanto cada variável referencia objetos(arrays) diferentes.
Se você quer compara os valores terá que acessar o índice que contém um valor, que no caso é o índice 0.

A comparação seria a[0] == b[0] que contém o mesmo valor retornando true.
O objeto a ou b retorna a referência do objeto; a[0] retorna o valor atribuído ao índice 0 do objeto(array).