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

时间:2014-02-22 05:07:25

标签: 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;
}

从上面这个函数中,变量“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;
       }

虽然我省略了这个“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;
    }

我得到了完美的输出,如

s1有“String”

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

将tt变量存储到s1变量。

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

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

3 个答案:

答案 0 :(得分:3)

temp = temp + Character.toString((char)c);

您没有在read()方法中定义temp,因此它可能被定义为全局变量。这意味着每次调用read()方法时,都会向其追加新值。 您应该在read()方法中定义temp:

String temp;

应该修复它。

答案 1 :(得分:2)

if(flag==1)
    {
        Log.d("Flag value", "flag= "+flag);
        //System.out.println("Read have "+read());
        String tt=read();
        s1=tt;
    }
上面的代码read()方法中的

是两次调用。并且在read()方法变量“temp”中声明为全局,并且您将连接数据,如

temp = temp + Character.toString((char)c);

因此值在temp变量中连续两次。

要解决问题,请将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;
       }

答案 2 :(得分:0)

InputStream is = Context.openFileInput(someFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((int bytesRead = is.read(b)) != -1) {
   bos.write(b, 0, bytesRead);
}
byte[] bytes = bos.toByteArray();