Android中的Java函数调用和返回值

Bre*_*don 6 java android function

我有一个Java类,其中一些代码基于标志值进行操作,下面是我的代码,它的标志值为1

if(flag==1)
{
    Log.d("Flag value", "flag= "+flag);
    System.out.println("Read have "+read());
    String tt=read();
    s1=tt;
}
Run Code Online (Sandbox Code Playgroud)

从上面的函数中,变量"s1"中的值是read()函数返回的某个字符串值.

这段代码的输出返回两次read()函数,就像

s1有"StringString"

这是我的阅读功能代码

public String read(){

          try{
             FileInputStream fin = openFileInput(file);
             int c;

             while( (c = fin.read()) != -1)
             {
                temp = temp + Character.toString((char)c);
             }
          }
          catch(Exception e)
          {

          }
          Log.d("INSIDE READ FUNC", "temp have "+temp);
        return temp;
       }
Run Code Online (Sandbox Code Playgroud)

虽然我省略了这个"System.out.println("Read have"+ read());" 通过以下代码

if(flag==1)
    {
        Log.d("Flag value", "flag= "+flag);
        //System.out.println("Read have "+read());
        String tt=read();
        s1=tt;
    }
Run Code Online (Sandbox Code Playgroud)

而且我得到了完美的输出

s1有"字符串"

为什么代码会像这样工作?我只调用了read()函数一次来存储到"tt"变量.

并将tt变量存储到s1变量.

但是当我使用System.out.println("Read have"+ read())时; 它调用并存储返回的字符串值在数组中,第二次我存储到"tt"字符串变量,并将最后返回的字符串从read()函数追加到"tt"字符串变量.

所以"tt"字符串变量有两次read()函数返回String.它是如何存储两次的?

Bir*_*dia 3

if(flag==1)
    {
        Log.d("Flag value", "flag= "+flag);
        //System.out.println("Read have "+read());
        String tt=read();
        s1=tt;
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码read()方法中调用了两次。并且内部read()方法变量“temp”被声明为全局变量,并且您可以连接数据,例如

temp = temp + Character.toString((char)c);
Run Code Online (Sandbox Code Playgroud)

所以值在临时变量中连接两次。

要解决此问题,请将 temp 声明为局部变量,例如

public String read(){
          String temp="";
          try{
             FileInputStream fin = openFileInput(file);
             int c;

             while( (c = fin.read()) != -1)
             {
                temp = temp + Character.toString((char)c);
             }
          }
          catch(Exception e)
          {

          }
          Log.d("INSIDE READ FUNC", "temp have "+temp);
        return temp;
       }
Run Code Online (Sandbox Code Playgroud)