The answer to your first question is yes, a lambda is always assigned to a SAM type.
As to your second question, yes, you can cast a lambda to explicitly specify it's target SAM type:
obj.method((Runnable)(()=> println("oh hai !")));