Алгоритм такой:
создается объект класса Student,
переменной student присваивается ссылка на этот объект,
в функцию printName передается ссылка на объект, где создается ее копия,
затем по копии ссылки производится обращение к полю student.name,
и оно выводится на консполь при помощи println
передавать можно, можно и возвращать. никакх проблем нет. ведь даже String, которым вы пользуетесь - это класс, такой же как и Student. его же можно передавать?