Using bitwise AND with non-booleans will bitwise AND together all of the bits of the two numbers one by one.
In this case, the number 0x7FFFFFFFL
is the hexadecimal representation of a number that is a 0 bit followed by 31 1 bits:
01111111111111111111111111111111
By ANDing this with an integer, you preserve the lower 31 bits (since 1 & x = x for any x) and clear the highest bit (since 0 & x = 0 for any x). Since Java uses a 32-bit signed two's-complement representation, this has the effect of clearing the sign bit, forcing the number to be positive.
My guess is that this program is using some sort of rolling hash function where the resulting number has to be positive. To do this, the code constantly updates the integer by combining it with more and more information, and at each step forces the number to be positive by clearing the sign bit.
Hope this helps!