2014-02-07 49 views
2

當我執行Java程序時,我注意到Java編譯器對文件名不區分大小寫,而Java解釋器區分大小寫。當Java(解釋器)區分大小寫時,爲什麼Java編譯器(javac)不區分大小寫?

區分大小寫的Java解釋器非常容易理解,因爲類文件的名稱是Java代碼中定義的類的名稱。

Java編譯器是不區分大小寫的嗎?

+0

你是否在Windows系統上執行java編譯器?如果是這樣,那麼就有你的罪魁禍首,因爲Windows將路徑視爲不區分大小寫。 –

+2

如果您嘗試使用'java MyProgram'運行程序,則命令行參數是類名稱,而不是文件名。 Java中的類名稱區分大小寫。這是你問的行爲嗎?至於爲什麼文件名不區分大小寫 - 如果你在Windows上,這就是事情的方式。 – ajb

回答

6

Windows文件系統不區分大小寫。
您無法(理性)在不區分大小寫的文件系統上查找區分大小寫的文件。

如果您在Linux上運行javac且區分大小寫的文件系統,它將區分大小寫。

+1

Windows保留大小寫,而不區分大小寫。 –

+0

@DavidConrad:查找是不區分大小寫的, – SLaks

+1

@DavidConrad如果我正確地猜出了你想要做的區別,那麼它有時*是重要的,但在這種情況下完全不相關。 – delnan

3

它取決於底層文件系統。 Windows的文件系統不區分大小寫,所以當java編譯器尋找'Foo.java'時,操作系統會高興地打開'foo.java'。

3

大概你正在Windows或其他操作系統上運行編譯器,既可以保留大小寫或不區分大小寫的文件系統。如果您在使用區分大小寫文件系統的操作系統上運行它,則會得到不同的結果。換句話說,它不是編譯器,而是操作系統(或者說它的文件系統)。

+1

明白了,謝謝..感謝您的時間.. – User27854

+3

允許我挑剔一點 - 這是**不是操作系統,它是文件系統。當你在Linux上並在NTFS文件系統中工作時,你會得到同樣的錯誤。 – Ingo

3

Windows仍然是一個面向兒童和人們的操作系統,他們只是想上網或做他們的財務文書工作。但不適合開發者。

由於近20年來,微軟已經做幾乎沒有關於:

  • 文件系統(它們可以保留自己心愛的NTFS作爲默認值,並提供一個又一個專業人士,可能他們不是)
  • 命令行,它仍然是我們用Windows NT得到的同樣糟糕的垃圾。請注意,NT代​​表「新技術」,但他們甚至無法繼承已有的10年或20年的可用時間。

因此,如果您開發Java,請確保您沒有僅在大小寫不同的類或包名稱。這總是會導致災難。

幫你一個忙,在你的HD上佔用一點空間,或者附加一個外部空間,然後安裝一個雙啓動LINUX。如果必須,請創建一個虛擬機。一旦你安裝了你喜歡的IDE,你將永遠不會回頭看。一路上你會學到一點或兩點。

+1

我想我應該感謝您給您一個空間讓您對微軟發泄憤怒。 您的建議採取了一旦我對JAVA有一個很好的命令,我將轉向Linux(Ubuntu,最好)。 – User27854

+0

@ user2900314沒有憤怒,只是事實。尤其是使用Java。您獨立於操作系統(除非您需要綁定到僅在Windows上提供的本機內容)。你有選擇。 – Ingo

+0

公平起見,他們確實在最新版本的Windows中添加了PowerShell,儘管很難說至少使其成爲默認的'cmd.exe':http://superuser.com/questions/608194/如何設置powershell作爲默認代替cmd-exe –