A két megoldás nem ekvivalens a getBar metódus lehetséges mellékhatása miatt (a kisbetű-nagybetű eltérés gondolom csak gépelési hiba). Ha ez nincs, akkor ekvivalens.
A objektum-metódushívás eléggé költséges művelet - arányaiban - a menedzselt nyelvekben, főleg akkor, ha nem final metódust hívunk. Tehát ha mikro-optimalizálni akarsz/kell, akkor az első (igazából sokadik, de itt első :-) lépés, hogy a gyakran hívott metódusokat final-ra állítjuk. Az optimalizálás pedig ennek a kódnak a futásidejére nézve arányaiban sokat jelenthet (közel 50%-ot is szerintem).
Az első esetben a metódushívás kétszer le fog futni, mivel a lehetséges mellékhatást a fordító nem tudja kizárni. (Persze csak abban az esetben, ha az első feltétel igaz.) Amennyiben a metódushívás "final" - azaz nem felüldefiniálható - metódusra történik, akkor inline-osítható a metódushívás, ami sokkal gyorsabb, mintha nem. Plusz ebben az esetben elvben a fordító rájöhet, hogy a hívás mellékhatásmentes, és akkor kioptimalizálhatja a második hívást.
A második esetben a metódushívás mindenképpen csak egyszer fut le. Az érték tárolása új lokális változóba nem lesz külön művelet futásidőben. Ugyanabba a regiszterbe fogja betenni a gépi kód a visszatérési értéket, mint amibe egyébként is tenné a feltételvizsgálathoz. Sőt, eleve regiszterben kapja vissza a metódushívásból (IMHO modern Java és C# így működik), tehát a változónév csak egy fordításidőben létező alias egy már eleve eltárolt értékre. Tehát a második eset mindenképpen gyorsabb lesz. (Vagy maximum egyforma, ha a fenti optimalizációkat mindet meg tudja csinálni a fordító az első esetre.)
Persze azt is nézni kell, hogy a feltételvizsgálat milyen statisztika szerint lesz igaz. Ha az első feltétel igaz a leggyakrabban, akkor ennek az optimalizálásnak nincs értelme.
Egyébként csatlakozom a többiekhez: az optimalizálásnak csak akkor van értelme, ha kimutathatóan ez a rész a szűk keresztmetszet a programodban. Az olvashatóság rovására pedig csak akkor szabad optimalizálni, ha elkerülhetetlen. IMHO a második változat olvashatóbb is, és kisebb a belső redundanciája. Azaz ha valaki belejavít (pl getBar->getFoo javítás), kisebb az esélye, hogy az egyik get hívást átírja, a másikat meg úgyfelejti. A szőrszálhasogatás a kedvenc elfoglaltságom :-).