diff --git a/javalang/test/test_tokenizer.py b/javalang/test/test_tokenizer.py
index 1390f85..02c112b 100644
--- a/javalang/test/test_tokenizer.py
+++ b/javalang/test/test_tokenizer.py
@@ -122,13 +122,33 @@
         # Then
         self.assertEqual(len(tokens), 8)
 
+    def test_inline_comment_position(self):
+        # Columns
+        #                11111111112
+        #       12345678901234567890
+        code = "int /* comment */ j;"
+        tokens = list(tokenizer.tokenize(code))
+
+        int_token = tokens[0]
+        j_token = tokens[1]
+        semi_token = tokens[2]
+
+        self.assertEqual(int_token.position.line, 1)
+        self.assertEqual(int_token.position.column, 1)
+
+        self.assertEqual(j_token.position.line, 1)
+        self.assertEqual(j_token.position.column, 19)
+
+        self.assertEqual(semi_token.position.line, 1)
+        self.assertEqual(semi_token.position.column, 20)
+
     def test_column_starts_at_one(self):
         code = """int j;
 int k;
 """
         token = list(tokenizer.tokenize(code))
-        self.assertEqual(token[0].position.col, 1)
-        self.assertEqual(token[3].position.col, 1)
+        self.assertEqual(token[0].position.column, 1)
+        self.assertEqual(token[3].position.column, 1)
 
 if __name__=="__main__":
     unittest.main()
diff --git a/javalang/tokenizer.py b/javalang/tokenizer.py
index 3b1fa63..14b628a 100644
--- a/javalang/tokenizer.py
+++ b/javalang/tokenizer.py
@@ -247,45 +247,28 @@
 
     def read_comment(self):
         if self.data[self.i + 1] == '/':
-            i = self.data.find('\n', self.i + 2)
-
-            if i == -1:
-                self.i = self.length
-                return
-
-            self.start_of_line = i
-            self.i = i
-
+            terminator = '\n'
         else:
-            i = self.data.find('*/', self.i + 2)
+            terminator = '*/'
 
-            if i == -1:
-                self.i = self.length
-                return
+        i = self.data.find(terminator, self.i + 2)
 
-            i += 2
+        if i == -1:
+            self.i = self.length
+            return
 
-            self.start_of_line = i
+        i += len(terminator)
+
+        comment = self.data[self.i:i]
+        start_of_line = self.data.rfind('\n', self.i, i)
+
+        if start_of_line != -1:
+            self.start_of_line = start_of_line
             self.current_line += self.data.count('\n', self.i, i)
-            self.i = i
 
-    def try_javadoc_comment(self):
-        if self.i + 2 >= self.length or self.data[self.i + 2] != '*':
-            return False
+        self.i = i
 
-        j = self.data.find('*/', self.i + 2)
-
-        if j == -1:
-            self.j = self.length
-            return False
-
-        j += 2
-
-        self.start_of_line = j
-        self.current_line += self.data.count('\n', self.i, j)
-        self.j = j
-
-        return True
+        return comment
 
     def read_decimal_float_or_integer(self):
         orig_i = self.i
@@ -521,11 +504,9 @@
                 continue
 
             elif startswith in ("//", "/*"):
-                if startswith == "/*" and self.try_javadoc_comment():
-                    self.javadoc = self.data[self.i:self.j]
-                    self.i = self.j
-                else:
-                    self.read_comment()
+                comment = self.read_comment()
+                if comment.startswith("/**"):
+                    self.javadoc = comment
                 continue
 
             elif startswith == '..' and self.try_operator():
