For me non of the answers above mentioned worked. In MacOS sudo may clear environment values so that is why your JAVA_HOME is different in sudo and without.
One solution that worked for me is to go to /etc/sudoers
file and check env_reset
or env_keep
property.
You have the description of each property here:
env_reset If set, sudo will reset the environment to only contain the following variables: HOME, LOGNAME, PATH, SHELL, TERM, and USER (in addi-
tion to the SUDO_* variables). Of these, only TERM is copied unaltered from the old environment. The other variables are set to
default values (possibly modified by the value of the set_logname option). If sudo was compiled with the SECURE_PATH option, its value
will be used for the PATH environment variable. Other variables may be preserved with the env_keep option.
env_keep Environment variables to be preserved in the user's environment when the env_reset option is in effect. This allows fine-grained con-
trol over the environment sudo-spawned processes will receive. The argument may be a double-quoted, space-separated list or a single
value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the =, +=, -=, and ! operators
respectively. This list has no default members.
So for keep the JAVA_HOME and tell sudo not change it ( and take the value by default or setted in your /.bash_profile) you should add a value for env_keep
as follow
Defaults env_keep += "JAVA_HOME"