As you know GeoTools uses OpenGIS declared APIs; BoundingBox and Envelope for example.
picture from geotools docs.
BoundingBox
Represents a two-dimensional envelope. This interface combines the ideas of GeographicBoundingBox with those of Envelope. It provides convenience methods to assist in accessing the formal properties of this object. Those methods (for example getMinX()) match common usage in existing libraries like Java2D.
Envelope
A minimum bounding box or rectangle. Regardless of dimension, an Envelope can be represented without ambiguity as two direct positions (coordinate points). To encode an Envelope. it is sufficient to encode these two points. This is consistent with all of the data types in this specification, their state is represented by their publicly accessible attributes.
I read the docs. Both of them describe a bounding region, but what is the difference?And what need to declare both? Where do you use them?