post_content is a property of the
WP_Post is an object representing the post data from the database. So
post_content contains the raw content as stored in the database.
the_content() is a template tag that displays the content of the current post. The 'current post' is whatever the global
$post variable is set to at the time the function is run. The global
$post variable is normally set within The Loop with
while( have_posts() ) : the_post();.
The crucial difference is that
the_content() runs the raw content through several filters that prepare it for display. These do things like adding paragraph tags, converting URLs to embeds for things like videos, and converting symbols like quotes to smart quotes etc. Many plugins use this filter as well, for adding things like Share buttons.
So if you just echo the
post_content it probably won't look right. You can mimic the output of
the_content() on raw data by applying the
the_content filter manually. So in your example you would do:
$post = get_post();
$split_content = explode( '|', $post->post_content );
echo '<h4>' . $split_content . '</h4>';
echo apply_filters( 'the_content', $split_content );