the GetHardwareAddress() method returns a Byte array. despite being in hex when encoded as a string, the byte representation of them at the io level is not encoded.

so you need to encode your data before trying to use it as a string. the question marks you are seeing are value in the byte array that are not part of your default encoding set.

try somthing like this:

Code:
String getUUID(){
    	String UUID = "No_Mac_Addresss";
    	try {
    		InetAddress addr = InetAddress.getByAddress(new byte[]{(byte) 192, (byte) 168, 1, 101});
    		System.out.println(addr.toString());
    		NetworkInterface inter = NetworkInterface.getByInetAddress(addr);
    		if(inter != null){
                     if(inter.isUp()){
                          UUID = "";
                          byte[] mac = inter.getHardwareAddress();
                          for (int i = 0; i < mac.length; i++) {
		               UUID += String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
	        	}
                     }
                }
        } catch (Exception e) {
		e.printStackTrace();
	}
	System.out.println(UUID);
    	return UUID;
    }