Дело в том, что human1 и human2 - действительно EffectivelyFinal.
Эти переменные содержат ссылку на объект. Эта ссылка не изменяется.
Переменная var - очевидно, не EffectivelyFinal.
Попробуйте присвоить human1 новый объект и увидите такое же предупреждение компилятора.
Цитата из книги «Современный язык Java. Лямбда-выражения, потоки и функциональное программирование»:
Возможно, вы слышали термин «замыкание» (closure, не путайте с языком программи- рования Clojure) и вам интересно, соответствуют ли его определению лямбда-выражения. На более формальном языке замыкание — экземпляр функции с возможностью без всяких ограничений обращаться к нелокальным по отношению к этой функции переменным. Например, замыкание можно передать как аргумент другой функции. Оно может также обращаться к переменным, объявленным вне его области видимости, и изменять их значения. Лямбда-выражения и анонимные классы Java 8 похожи на замыкания: их можно передавать в качестве аргументов методам, они могут обращаться к переменным вне своей области видимости. Но на них налагается ограничение: они не могут модифицировать содержимое локальных переменных метода, в котором описаны. Эти переменные фактически являются неизменяемыми (final). Удобно считать, что лямбда-выражения замыкают значения, а не переменные. Как уже объяснялось ранее, это ограничение связано с тем, что локальные переменные располагаются в стеке и неявным образом ограничены своим потоком выполнения. Если разрешить захват изменяемых локальных переменных, это приведет к открытию новых потоконебезопасных, а значит, нежелательных возможностей (переменные экземпляра в этом смысле допустимы, поскольку хранятся в куче, совместно используемой разными потоками выполнения).