Char will store null values even if the data inside the field is less than the specified length. Storage will be same as specified length. Varchar2 will store null values if data is less than specified length storage will be that much only.
A varchar2 datatype when stored in a database table uses only the space allocated to it. If you have a varchar2(1999) and put 50 bytes in the table we will use 52 bytes (leading length byte).
A char datatype when stored in a database table always uses the maximum length and is blank padded. If you have char(1999) and put 50 bytes into it it will consume 2001 bytes (leading length field is present on char's as well).
In the database -- a CHAR is a VARCHAR that is blank padded to its maximum length.