If I pass by reference then I get into a terrible loop.
Could you describe more of what the problem is? Typically you would have something like ant.update(world), and the ant would figure out what it wants to do then performs that action. Where are you running into a loop?
Well this is how I have it so far.
World.update(turn, board, width) which calls Square.update(turn, board, width) which then calls Ant.update(turn, board, width).
Since this is Java I can't make it constant which prevents me from limiting the Ants interaction, unless I make all of the Square methods private and thus immutable...
I am just getting confused as to how in simulations and games how different classes work and update.