Основные различия, которые я вижу, заключаются в их:
Область действия: Локальные переменные видны только в объявленном методе или блоке, тогда как переменные экземпляра могут просматриваться всеми методами в классе.
Место, где они объявлены: Локальные переменные объявляются внутри метода или блока, тогда как переменные экземпляра внутри класса, но вне метода.
Время существования: Локальные переменные создаются при вызове метода и уничтожаются при выходе из метода, тогда как переменные экземпляра создаются с использованием new и уничтожаются сборщиком мусора, когда на них нет ссылок.
Доступ: Вы не можете получить доступ к локальным переменным, тогда как переменные экземпляра могут быть доступны, если они объявлены как публичные.
Где они объявлены: Локальные переменные объявляются в методе или блоке до их вызова, тогда как переменные экземпляра могут быть объявлены в любом месте уровня класса (даже после их использования).
EDIT:
И я забыл упомянуть, что переменные экземпляра всегда имеют значение, даже если оно не назначено кодом (тогда они будут иметь, например, null, 0, 0.0, false). Для локальных переменных в коде должно быть присвоено значение, иначе компилятор выдаст ошибку.