O que o Bruno falou eh que valores primitivos:
int, double, long. char, etc tem valores default, ja que são tipos primitivos, por exemplo long é representado por 64 bits, e esses bits sempre vão representar um número, que no caso default eh 0, por isso não da para ele ser null, afinal teria que criar um padrão para essa combinação de bits que representaria null.
No caso dos wrapper, são classes (objetos) que representam esses tipos primitivos, como são objetos, eles podem referenciar um valor null, a variavel que representa esse objeto pode estar apontando para null, exemplos dessas classes são Integer, Long, Double, etc, repare que eles começam com letra maiuscula e tem métodos, atributos, etc, tudo que outro objeto tb tem.
Então fazer:
float x;
não é o mesmo que:
Float x
Então, nesse procedimento web, vc recebe um float ou um Float?! se for um long pode ter certeza que ele nunca sera null, agora se for Long ai vai poder ser.
respondendo as suas ultimas perguntas, eu não acho que vc deva mandar como String, já que trabalhando com Float vc pode usar null… a menos que vc naum tenha controle desse controle sobre esse procedimento web e ele sempre vai converter para primitivo.
e sobre a data, segue um codigo que converte:
try {
SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf1.parse("28/07/2006");
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy");
String dateString = sdf2.format(date);
System.out.println(dateString);
} catch (ParseException e) {
e.printStackTrace();
}