Ten slabě typovaný příklad není zvolen moc šťastně.
Tak zaprvé, stačí do toho printf místi %d dát %s a výsledek bude korektní (za předpokladu, že ten integer bude třeba 2).
A navíc pro Javu je taktéž definovaná operace sčítání mezi stringem a integerem (i když s jinou sémantikou). To z jazyka ještě nedělá slabě typovaný.
Slabě typovaný je ten, jehož překladač/interpretr dělá ad hoc konverze typů tak, aby to explicitně nemusel dělat programátor. Třeba céčko skoro pokaždé převede pole na ukazatel na první prvek.