2016-01-21 37 views
2

我想比較字符和ascii值,我使用波紋管代碼。它工作正常,但我有疑問。下面的行被執行。 我沒有將s.charAt(i)轉換爲int,但是它如何與ascii值進行比較。這條線是如何在java中執行的?

代碼1:

if(s.charAt(i)>='a' && s.charAt(i)<='z'){ 
} 

代碼2:

if((int)s.charAt(i)>='a' && (int)s.charAt(i)<='z'){ 
} 

在上述2個碼工作same.I需要知道代碼1和代碼2之間的差。任何人都可以幫助我瞭解這一點嗎?

+8

使用'javap -v className.class'來查看實際的字節碼以及使用的實際值是什麼..它總是很方便:) – TheLostMind

回答

2

比較運算符用於數字操作數 - 或者更具體地說,用於可以轉換爲數字操作數的操作數(JLS 15.20.1)。所以即使在你的「代碼1」的例子中,四個字符(s.charAt(i)中的兩個和兩個文字)也會自動提升爲int,以便進行比較。

比較的第一步是使用「二進制數字轉換」使兩個操作數都是相同類型(JLS 5.6.2)。基本上,它們被擴大到可以容納這兩種類型的最窄型,其在char的情況下爲int。一旦完成,這只是一個直接的,簽署的比較。

相關問題