开发者社区 问答 正文

如何通过JavaLangAccess快速构造一个字符串?

如何通过JavaLangAccess快速构造一个字符串?

展开
收起
花开富贵111 2024-08-19 10:21:00 59 分享 版权
2 条回答
写回答
取消 提交回答
  • 尽管不推荐使用,但理论上你可以通过SharedSecrets获取JavaLangAccess实例,并调用其newStringNoRepl方法来快速构造字符串。示例代码如下(注意:此方法在不同JDK版本中可能不可用或需要调整):

    JavaLangAccess javaLangAccess = SharedSecrets.getJavaLangAccess(); 
    String str = javaLangAccess.newStringNoRepl(bytes, StandardCharsets.US_ASCII);
    

    其中,bytes是字节数组,StandardCharsets.US_ASCII是字符集。但请注意,由于JavaLangAccess和newStringNoRepl方法的可见性和可用性可能受限,这种方法在实际应用中可能不可行。

    2024-08-19 15:51:44
    赞同 展开评论
  • 阿里云大降价~

    可以的
    在Java中,String 类是不可变的,这意味着一旦创建了一个字符串,就不能更改它。但是,如果你想快速创建一个新的字符串,你可以使用 sun.misc.SharedSecrets 类中的 JavaLangAccess 接口来绕过常规的字符串创建过程。

    以下是一个示例代码,

    import sun.misc.SharedSecrets;
    import java.lang.invoke.StringConcatFactory;
    
    public class FastStringCreation {
        public static void main(String[] args) {
            // 获取JavaLangAccess对象
            JavaLangAccess javaLangAccess = SharedSecrets.getJavaLangAccess();
    
            // 创建一个StringConcatFactory实例
            StringConcatFactory stringConcatFactory = StringConcatFactory.make(MethodHandles.lookup(),
                                                                              StringConcatFactory.Mode.INVOKE_EXACT);
            // 使用JavaLangAccess和StringConcatFactory来构造字符串
            String newString = (String) javaLangAccess.createString(stringConcatFactory, "Hello, World!".toCharArray());
    
            System.out.println(newString);
        }
    }
    

    参考文档

    这个书里面有很详细的教java
    image.png

    2024-08-19 10:44:22
    赞同 1 展开评论
问答地址: