[英]Diff Between instance variable and local variable in java
public class Test{
static String s="sbi";
public static void main(String[] args)
{
for (int i=0;i<=5;i++){
System.out.println(s=s+i);
}
}
}
in this case output is
sbi0
sbi01
sbi012
sbi0123
sbi01234
sbi012345
在這種情況下,公共類測試{
public static void main(String[] args)
{
String s="sbi";
for (int i=0;i<=5;i++){
System.out.println(s=s+i);
}
}
}
輸出與以前相同,但是當我執行此公共類 Test{
public static void main(String[] args)
{
for (int i=0;i<=5;i++){
String s="sbi";
System.out.println(s=s+i);
}
}
}
output is
sbi0
sbi1
sbi2
sbi3
sbi4
sbi5
我的問題是,當我將 String s 放在 for 循環之外時它是如何工作的,然后它是如何工作的以及它是如何附加的,當我將 String s="sbi" 放在 for 循環中時它工作得很好。你能告訴我實例和本地的方式嗎?變量有效,並且當 String s 在 for 循環中時,它是局部變量,當它在 main 中時,它也是局部變量,所以它們之間有什么區別。我為愚蠢的問題道歉,因為我是新手。請給我提供好的概念請我對你謙虛
在您的第一個和第二個片段中, s
在循環之前分配了“sbi”,並在循環的每次迭代中分配了s+i
。
在您的最后一個片段中, s
在循環的每次迭代中被分配兩次 - 首先分配給“sbi”,然后分配給s+i
並在下一次迭代中再次分配“sbi”之前打印。 因此它永遠不會被分配一個超過 4 個字符的字符串。
要突出顯示使用局部變量的兩個片段之間的區別:
第二個片段相當於:
String s = "sbi";
{
System.out.println(s=s+0);
}
{
System.out.println(s=s+1);
}
{
System.out.println(s=s+2);
}
{
System.out.println(s=s+3);
}
{
System.out.println(s=s+4);
}
{
System.out.println(s=s+5);
}
在每次迭代中, s
被分配一個新的 String ,它是s
的先前值和i
的當前值的串聯。 因此, s
的長度在每次迭代中都會增加。
另一方面,您的最后一個片段相當於:
{
String s="sbi";
System.out.println(s=s+0);
}
{
String s="sbi";
System.out.println(s=s+1);
}
{
String s="sbi";
System.out.println(s=s+2);
}
{
String s="sbi";
System.out.println(s=s+3);
}
{
String s="sbi";
System.out.println(s=s+4);
}
{
String s="sbi";
System.out.println(s=s+5);
}
s
在每次迭代中都被分配了“sbi”,因此打印的值總是“sbi”連接到i
的當前值。
如果你這樣做:
for (int i=0;i<=5;i++){
String s="sbi";
System.out.println(s=s+i);
}
您正在為循環中的每次迭代創建一個新變量 String s ,因此將值附加到 s 上並非如此,而是您只是覆蓋該值並將其分配給 i 變量中的步驟
這是兩者之間的主要區別...
在您的第二個代碼片段中,這一行
String s="sbi";
每次都會再次執行。 s
是 for 循環的局部變量,並在每次新迭代中重新定義。
在您的第一個示例中,它保持迭代。
你能告訴我實例和局部變量是如何工作的嗎,當 String s 在 for 循環中時它是局部變量,當它在 main 中時它也是局部變量,那么它們之間有什么區別
你最后一個例子的原因是給你一個輸出
sbi0
sbi1
sbi2
sbi3
sbi4
sbi5
是因為您在每個循環開始時都將String s
值重置為“sbi”!
在每次新的迭代中,您創建一個新的 String s
並將其值設置為"sbi"
,然后打印i
值。
java中實例變量和局部變量的區別
實例變量
實例變量是屬於單個對象的變量。
例子:
//All pets have their own name
class Pet
{
String name; //An instance variable
}
局部變量
局部變量是在作用域內聲明的變量:
例子:
if(condition){
int x; //a local variable
}
//or
for(int x=0; x<100; x+=){
int val; //a local variable
}
類變量
您創建的String s
為靜態:
static String s="sbi";
這些是類變量。 靜態變量由同一類的所有實例共享。 它甚至在您的對象創建之前就存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.