Como comparar duas imagens de botões diferentes!

Tenho várias imagens em 16 botões diferentes, e queria saber como posso comparar duas dessas imagens, dando uma mensagem se são iguais ou não.
Julgo que o melhor é passar o código todo para entenderem melhor a minha questão!
O objectivo do programa é um jogo em que o jogador vira duas cartas e se forem iguais, ficam viradas para cima. O utilizador ganha quando tiver virado as 16 cartas que fazem um total de 8 imagens diferentes.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class jogo extends JPanel implements ActionListener
{
	JLabel c;
	JPanel msgs;
	JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
	ImageIcon img, img1,img2,img3,img4,img5,img6,img7,img8;
	JFrame f;
	int contador=0;

	
	public jogo()
	{
	//Imagem que aparece nos 16 botões
		ImageIcon img = createImageIcon ("img.jpg");
			
	//Definição da imagem presente nos 16 botões	
		b1= new JButton(img);
		b1.setActionCommand("b1");
		b1.addActionListener(this);
		
		
		b2= new JButton(img);
		b2.setActionCommand("b2");
		b2.addActionListener(this);
		
	
		b3= new JButton(img);
		b3.setActionCommand("b3");
		b3.addActionListener(this);
		
	
		b4= new JButton(img);
		b4.setActionCommand("b4");
		b4.addActionListener(this);
		
	
		b5= new JButton(img);
		b5.setActionCommand("b5");
		b5.addActionListener(this);
		
	
		b6= new JButton(img);
		b6.setActionCommand("b6");
		b6.addActionListener(this);
		
	
		b7= new JButton(img);
		b7.setActionCommand("b7");
		b7.addActionListener(this);
		
	
		b8= new JButton(img);
		b8.setActionCommand("b8");
		b8.addActionListener(this);
		
	
		b9= new JButton(img);
		b9.setActionCommand("b9");
		b9.addActionListener(this);
		
	
		b10= new JButton(img);
		b10.setActionCommand("b10");
		b10.addActionListener(this);
		
	
		b11= new JButton(img);
		b11.setActionCommand("b11");
		b11.addActionListener(this);
		
	
		b12= new JButton(img);
		b12.setActionCommand("b12");
		b12.addActionListener(this);
		
	
		b13= new JButton(img);
		b13.setActionCommand("b13");
		b13.addActionListener(this);
		

		b14= new JButton(img);
		b14.setActionCommand("b14");
		b14.addActionListener(this);
		
	
		b15= new JButton(img);
		b15.setActionCommand("b15");
		b15.addActionListener(this);
		
	
		b16= new JButton(img);
		b16.setActionCommand("b16");
		b16.addActionListener(this);
		
	//Actualização da Label
		JLabel c = new JLabel();
	
	//Adicionar as imagens aos botões
		add(b1);
		add(b2);
		add(b3);
		add(b4);
		
		add(b5);
		add(b6);
		add(b7);
		add(b8);
		
		add(b9);
		add(b10);
		add(b11);
		add(b12);
		
		add(b13);
		add(b14);
		add(b15);
		add(b16);
		
		add (c);
	

		
	
	}
	
	protected static ImageIcon createImageIcon (String path)
	{
		java.net.URL imgURL = jogo.class.getResource (path);
		if (imgURL != null)
		{
			return new ImageIcon (imgURL);
		}
		else
		{
			System.err.println ("Não encontrou o ficheiro: " +path);
			return null;
		}
	}
	
	
	public void actionPerformed(ActionEvent e)
	{
		
		String acao, acao1, acao2;
		
		acao = e.getActionCommand();
		acao1 = "img";
		acao2 = "img";
		
		if(contador==0)
		{
			acao1 = acao;
		}
		else
		{
			acao2 = acao;
		}
		
		if(acao1==acao2)
		{
			JPanel msgs = new JPanel();
			JOptionPane.showMessageDialog(msgs,"Parabéns");
		}
				
		JLabel c= new JLabel();
		
		
	
		//Definir depois de dois cliques nos botões as imagens iniciais aos botões
			if(contador==2)
			{
			ImageIcon img = createImageIcon ("img.jpg");
			b1.setIcon(img);
			b2.setIcon(img);
			b3.setIcon(img);
			b4.setIcon(img);
			b5.setIcon(img);
			b6.setIcon(img);
			b7.setIcon(img);
			b8.setIcon(img);		
			b9.setIcon(img);
			b10.setIcon(img);
			b11.setIcon(img);
			b12.setIcon(img);
			b13.setIcon(img);
			b14.setIcon(img);
			b15.setIcon(img);
			b16.setIcon(img);
			contador=0;
			}
		
		//Troca de imagens ao clicar no botão
			if(acao=="b1")
			{
				if((contador<2)&&(b1!=new JButton(img1)))
				{
					contador++;
					ImageIcon img1 = createImageIcon("img1.jpg");
					b1.setIcon(img1);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}				
			}
			if(acao=="b2")
			{
				if((contador<2)&&(b2!=new JButton(img2)))
				{
					contador++;
					ImageIcon img2 = createImageIcon("img2.jpg");
					b2.setIcon(img2);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}
			}
			if(acao=="b3")
			{
				if((contador<2)&&(b3!=new JButton(img3)))
				{
					contador++;
					ImageIcon img3 = createImageIcon("img3.jpg");
					b3.setIcon(img3);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}
			}
			if(acao=="b4")
			{
				if((contador<2)&&(b4!=new JButton(img4)))
				{
					contador++;
					ImageIcon img4 = createImageIcon("img4.jpg");
					b4.setIcon(img4);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}	
			}
			if(acao=="b5")
			{
				if((contador<2)&&(b5!=new JButton(img5)))
				{
					contador++;
					ImageIcon img5 = createImageIcon("img5.jpg");
					b5.setIcon(img5);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}
			}
			if(acao=="b6")
			{
				if((contador<2)&&(b5!=new JButton(img5)))
				{
					contador++;
					ImageIcon img5 = createImageIcon("img5.jpg");
					b6.setIcon(img5);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}
			}
			if(acao=="b7")
			{
				if((contador<2)&&(b7!=new JButton(img7)))
				{
					contador++;
					ImageIcon img7 = createImageIcon("img7.jpg");
					b7.setIcon(img7);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}	
			}
			if(acao=="b8")
			{
				if((contador<2)&&(b8!=new JButton(img8)))
				{
					contador++;
					ImageIcon img8 = createImageIcon("img8.jpg");
					b8.setIcon(img8);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}	
			}
			if(acao=="b9")
			{
				if((contador<2)&&(b9!=new JButton(img1)))
				{
					contador++;
					ImageIcon img1 = createImageIcon("img1.jpg");
					b9.setIcon(img1);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}		
			}
			if(acao=="b10")
			{
				if((contador<2)&&(b10!=new JButton(img2)))
				{
					contador++;
					ImageIcon img2 = createImageIcon("img2.jpg");
					b10.setIcon(img2);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}		
			}
			if(acao=="b11")
			{
				if((contador<2)&&(b11!=new JButton(img3)))
				{
					contador++;
					ImageIcon img3 = createImageIcon("img3.jpg");
					b11.setIcon(img3);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}		
			}
			if(acao=="b12")
			{
				if((contador<2)&&(b12!=new JButton(img4)))
				{
					contador++;
					ImageIcon img4 = createImageIcon("img4.jpg");
					b12.setIcon(img4);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}			
			}
			if(acao=="b13")
			{
				if((contador<2)&&(b13!=new JButton(img5)))
				{
					contador++;
					ImageIcon img5 = createImageIcon("img5.jpg");
					b13.setIcon(img5);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}			
			}
			if(acao=="b14")
			{
				if((contador<2)&&(b14!=new JButton(img6)))
				{
					contador++;
					ImageIcon img6 = createImageIcon("img6.jpg");
					b14.setIcon(img6);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}				
			}
			if(acao=="b15")
			{
				if((contador<2)&&(b15!=new JButton(img7)))
				{
					contador++;
					ImageIcon img7 = createImageIcon("img7.jpg");
					b15.setIcon(img7);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}			
			}
			if(acao=="b16")
			{
				if((contador<2)&&(b16!=new JButton(img8)))
				{
					contador++;
					ImageIcon img8 = createImageIcon("img8.jpg");
					b16.setIcon(img8);
					JPanel msgs = new JPanel();
					JOptionPane.showMessageDialog(msgs,""+contador);
				}	
			}
			//JPanel msgs=new JPanel();
			//JOptionPane.showMessageDialog(msgs,"Passou o ciclo "+contador);
		
		
	}

		
	public static void main (String s[])
	{
		
		
		
		JFrame f = new JFrame();
		f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
		f.setLocation(0,0);
		f.setTitle ("Jogo");
		jogo newContentPane = new jogo();
		newContentPane.setLayout(new GridLayout (5,3));
		
		f.setContentPane (newContentPane);
		f.pack();
		f.setVisible (true);
		

		
	}
}

Por que você não muda a sua abordagem?
Crie um objeto CartaBaralho e atribua um identificador para ele. Esse identificar você usuará inclusive para resolver a imagem que o representa.

Nesse caso, você não se preocupará em comparar imagens, mas em comparar os identificadores.

Além do mais, você poderia usar uma matriz (ou ArrayList) para os 16 botões né?! Acho que ficaria mais simples o código como um todo, inclusive na sua manutenção.

E, por favor, nao cole o teu programa inteiro no forum. Ninguem tera tempo / paciencia para entender a logica e procurar por problemas.
Tente detalhar a sua duvida / problema, abordagem utiolizada, o que falhou, onde falhou etc…

Rafael

Olha… fiz estou desenvolvendo um programa identico…
ninha estrategica foi criar uma “chave” para cada par de imagem
e comparar estas chaves(id) caso seja iguais : par encontrado.

if (id1 == id){
botao1.setEnable(false);
botao.settEnable(false);
}

estando encontrado eu desabilito o botao para nao disparar mais nenhum evento!!