How are we actually getting the char count though?
I think it is with this line of code. But i the way i interpret
it is that we are filling each index of the integer array
with each character of the string being supplied. the ++
increments the array and .charAt(i) increments to the next
char in the String.
First, let's make sure we mean "the integer count of characters" when we say "the char count".

We are not "...filling each index of the integer array
with each character..." since an int is an int and a character is a character. What we can do is count the characters with an integer datatype "int".

.charAt(i) does not increment anything, it returns a char which is a character. But this char is implicitly cast to an int. This int is an index that just happens to correspond to the location in the histogram integer array that we hold the count of this particular char. .charAt(i) in this case is an index used by the integer array named "histogram".

Once we have indexed the element in the integer array named "histogram", we increment it by the "++". It is as if we said
histogram[67]++;
For this app, we intend to interpret the integer (the int) represented by "histogram[67]" as the count of the character "C" in a string.

Later, when we see that the int at index 67 is some number, we say that this number is the number of ocurances of the letter "C".

Let's say I have 26 boxes. I label each box by one letter A to Z. But these boxes only hold numbers. If I'm given a string "CAT", when I see an A, I add 1 to the value in the box labelled A. When I see a C or a T, I increment the integer value of whatever is in the box named C or T. When I'm done "parsing" my string, I look at the numbers in each box. Whatever number is in the box, I look at the name of the box and interpret this to mean that for this letter, this many of that letter occured in my string.

Depending on the name of a "box", we say different things about a property because of the number the box contains..
If 65 is the first number in an RGB sequence, we say that is an intensity of 65 for red.
If 65 is in an ascii set, we say it is the letter A.
If 65 is in the bracket of an array, we mean the element at position 65.
If I'm using 65 for addressing in an integer array, once I've addresed the element, I'm only dealing with an int. I then increment the int at this position and later interpret this as how many A's I've counted.
histogram[65] represents the number of A's that I've counted.

I simple coding (encryption) could be to interpret the integer at a different position in an array (say by having boxes labelled 2-27 instead of 1-26 or A-Z). Then I'd interpret whatever was in box 2 to really represent the count of A's, etc. But I'd have to remember the mapping of numbers to letters for this "encryption scheme.

In this code, ABC is 66, 67, 68
Then ABBA would be encoded as BCCB or 67, 68, 68, 67 instead of the "normal" 65,66,66,65. To decode, we subtract 1 and can use that value as if it was the ascii code.

Sorry for the tangent. I hope you get it now.