我在玩JShell並試圖將變量轉換爲其原始形式。要做到這一點,我使用/r
重置在REPL的一切,然後我進口java.util.*
和創建的列表:在JShell中將變量轉換爲其原始形式
-> import java.util.*;
-> List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
| Modified variable l of type List<String> with initial value [a, b]
現在我想要的清單值轉換爲大寫,所以我做:
-> l.replaceAll(String::toUpperCase)
-> l
| Variable l of type List<String> has value [A, B]
清單使用/list
執行的源我已經輸入(或/l
)表示:
-> /l
1 : List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
2 : l.replaceAll(String::toUpperCase)
3 : l
現在,當我嘗試重置列表上演,我得到了import
聲明(改變其值之前):
-> /1
import java.util.*;
有誰知道爲什麼會這樣?我在沒有import
聲明的情況下嘗試了相同的操作,但是我得到了相同的結果(我認爲這是因爲它顯式導入)。
我剛剛注意到,如果我寫/l all
我得到:
-> /l all
s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) { System.out.printf(format, args); }
1 : String a = "a";
2 : a = "b"
我不知道爲什麼/1
執行第一import
聲明,而不是第一個字符串賦值。即使import java.util.*;
在那裏,s5
是import java.util.concurrent.*;
(這顯然是多餘的)也是非常奇怪的。
/ 重新執行該代碼段。它不會重置執行到那一點。 –