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.它是如何存储两次的?
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)
| 归档时间: |
|
| 查看次数: |
15987 次 |
| 最近记录: |