string.trim().length() == 0 is not the same result as "".equals(string). There is no sense in comparing their performance because they serve different purposes. (However, for the purpose of speculation string.trim().length() == 0 will generally be slower because trim involves an array copy.)
string.trim().length() == 0 means "string might not be empty but only contains whitespace".
"".equals(string) means "string is only empty or null".
Just for example "".equals(" ") evaluates to false but " ".trim().length() == 0 evaluates to true.
Now the results of the expressions "".equals(string) and string != null && string.length() == 0 are the same. string != null && string.length() == 0 will technically be faster but it really doesn't matter. The difference will be so small, on the scale of a few nanoseconds. This is because "".equals(string) will only get as far as comparing the lengths.
Also in general this is not the type of thing to worry about optimizing.
" ", the other returns false.