簡體   English   中英

java中實例變量和局部變量的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM