这是sha1哈希函数的代码。我想从main函数访问sb字符串。我可以访问 sb字符串但未反映在main函数中。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class sha1 {
/**
* @param args
* @throws NoSuchAlgorithmException
*/
public String sb1;
public void printkey(String convert){
sb1=sha1(convert) ;
System.out.println(sb1);
}
public String sha1(String input) {
StringBuffer sb = new StringBuffer();
sha1 rr= new sha1();
try{
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(input.getBytes());
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
rr.sb1=sb.toString();
System.out.println("\n");
System.out.println(rr.sb1);
}
catch ( NoSuchAlgorithmException nsae ) {
System.out.println(nsae);
}
return sb1;
}
当我从主类访问sb1时,它不会在printkey函数中输出任何内容。 Printkey正在提供正确的输出。我想从主函数中看到更新的sb。
public static void main(String[] args) {
sha1 m=new sha1();
System.out.println("\n");
System.out.println(m.sb1);
}
答案 0 :(得分:2)
您的问题是您的sha1
方法正在创建新实例并设置该新实例的String。因此,原始实例的sb1
(在main方法中创建的实例)永远不会更新。
更改:
sha1 rr= new sha1();
....
rr.sb1=sb.toString();
致:
sb1 = sb.toString();
此外,看起来您调用的是printkey
,它会调用您的sha1
方法。您可能想在主方法中调用它。
答案 1 :(得分:1)
正如我在评论中所说,你的代码存在很多问题,这是一个有效的版本:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Sha1 {
private String value = null;
public Sha1(final String input) {
final StringBuffer sb = new StringBuffer();
try {
final MessageDigest mDigest = MessageDigest.getInstance("SHA1");
final byte[] result = mDigest.digest(input.getBytes());
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
value = sb.toString();
} catch (NoSuchAlgorithmException nsae) {
value = null;
nsae.printStackTrace();
}
}
public String getValue() {
return value;
}
public static void main(final String[] args) {
final Sha1 testSha1 = new Sha1("test");
System.out.println(testSha1.getValue());
}
}