Являются ли свойства Java-системы всегда ненулевыми?

Есть пара системных свойств Java, среди которых такие вещи, как java.home и path.separator, user.home. spec не упоминает никаких формальных promises о существовании этих значений.

Особенно меня интересует user.home. Всегда ли это указывает на какой-то существующий путь?

Ответ 1

Я думаю, вы можете смело предположить, что все свойства в этом списке всегда доступны в любой недавней (с поддержкой Oracle) JVM.

Однако, проверка null более защитная, и в этом случае она не дорогая.

Я никогда не видел, чтобы user.home был нулевым или был неправильно указан по умолчанию. Однако имейте в виду, что пользователи могут переопределять с помощью -Duser.home=..., поэтому вы не можете полагаться на него, чтобы указать на существующий путь.

Ответ 2

В документации, которую вы указали, указано

The getProperty method returns a string containing the value of the property. If the property does not exist, this version of getProperty returns null.

Итак, если свойство не существует, вы получаете значение null

Ответ 3

Спектр говорит, что user.home содержит пользовательский домашний каталог, он не говорит, что может содержать null. Я не сомневаюсь, что JVM гарантирует, что он всегда установлен.

Ответ 4

Свойства по умолчанию будут различаться в зависимости от ОС. Будут некоторые ключи, для которых не определены значения. На моей машине я нашел user.variant и user.timezone без каких-либо значений! Ниже приведен код, в котором будут перечислены все пары значений ключа:

Properties prop = System.getProperties();     
      Set<Object> set = prop.keySet();    
      Iterator<Object> itr = set.iterator();

      while(itr.hasNext()){

          Object obj = itr.next();
          String propVal = System.getProperty(obj.toString());  
              System.out.println(obj.toString()+" = "+propVal);

      }
    }

Относительно вашей конкретной ссылки о user.home, похоже, она определялась большую часть времени. Ознакомьтесь с этим интересным сообщением, где люди опубликовали список свойств системы на разных машинах.