如何从主类访问更新的字符串

时间:2014-12-29 12:21:11

标签: java string

这是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);

}

2 个答案:

答案 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());
    }
}