title: what is the difference between this and address(this) in solidity
body: <p>From the solidity document, I get to know that <code>this</code> is address of contract. Then why following contract throws errors,
  pragma solidity ^0.6.2;</p>
  <pre><code>contract Sample {
      function getContractAddress() public view returns (address) {
          return this;
      }
  }
  </code></pre>
  <p>But typecasting <code>this</code> as <code>address(this)</code>. Then what is the data type of <code>this</code>
  If I want keccak256, Should I use <code>keccak256(abi.encodePacked(this, num)) // uint256 num</code> OR <code>keccak256(abi.encodePacked(address(this)), num)</code>
  So that I can get the result of <code>web3.utills.sha3(contractAddress, num) //contractAddress - address(this)</code></p>