I thought the public keys were the same as the bitcoin address?
Addresses are the Public Key Hash (PubKeyHash) along with with version and checksum information encoded in Base58. When you send funds to a user you are sending it to their PubKeyHash (which your client reverses from the address you provide). This is why one reason why address reuse is discouraged. Once funds are spent from an address the actual PubKey is known (it included in the input so other nodes can validate the signature).
Thanks for the info on that, but then how to avoid address resuse? If i have 10 coins and I send you 2 coins, what I do with the 8 left in my wallet? Are you saying I have to immediately move
them to another address?