ADD_MONTHS returns a new date_expression or timestamp_expression with YEAR and MONTH fields adjusted to provide a correct date, but a DAY field adjusted only to guarantee a valid date, which might not be a date you expect intuitively.
If this behavior is not acceptable for your application, use ANSI SQL:2011 DateTime interval arithmetic instead. For more information, see ANSI Interval Expressions.
Remember that ADD_MONTHS changes the DAY value of the result only when a non valid date_expression or timestamp_expression would otherwise be reported.