Socket problema (BufferedReader): string "ok"<> string "ok"?

Boa noite pessoal.

Estou com um problema um tanto estranho. Já procurei a respeito e agora estou tirando a dúvida com vocês.

Tenho a minha classe CLIENTSOCKET enviando uma string para o SERVERSOCKET nestas condições:

CLIENTE:

public static void main( String[] args ){
		Socket s = null;
		PrintStream ps = null;
		
		try
		{
			s = new Socket("localhost", 4444);
			ps = new PrintStream(s.getOutputStream());
			
				ps.println("0");
				ps.println("255");
				ps.println("0");
				ps.println("255");
				ps.println("0");
				ps.println("ok");

... (RESTO DO CÓDIGO)

Do lado servidor, recebo corretamente todos as strings passadas por parâmetro, mas não são bem interpretadas. MInhas estruturas WHILE e IF não as reconhecem e deixam passar despercebidas os testes de decisões comuns, do tipo: SE “0” FOR DIFERENTE DE “0” EXECUTE. E está sendo executado.

Vejam o servidor:

		try
		{
                      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));	
		      String msg_in = in.readLine(); //debug msg_in = 0
			
		      while(msg_in != "0") //debug msg_in = 0 => EXECUTA
		      {
				if(msg_in != "0") //TESTANDO NOVAMENTE! debug msg_in = 0
				     JOptionPane.ShowMessageDialog("null, msg_ok"); //EXECUTA E EXIBE 0 NO JOPTION PANE

				msg_in = in.readLine();

			}//END OF WHILE





...RESTO DO CÓDIGO

O que posso fazer para isso dar certo? Preciso que as strings passadas como parâmetro sejam reconhecidas na minha classe do servidor.

Obrigado!

Para voce comparar o conteudo de uma string voce tem que usar o metodo equals

if (!msg_in.equals("0")) {

poxa, obrigado! Não sabia disso.

Só completando o do nosso amigo…

comparador == verifica se a referencia na memoria é igual…
ou seja

String x1 = "abc";
String x2 = x1;

nesse caso as duas se referem ao mesmo "endereco de memoria "

o metodo equals, valida o conteudo do Objeto

blz ??