Long String vs StringBuilder的变体性能

时间:2015-08-27 22:50:34

标签: java string optimization

您好我已经看过几种创建字符串的方法,我想知道哪一种更快,即性能更好

var pdf = require('html5-to-pdf');
var fs = require('fs');

router.post('/pdf', function(req, res) {
  var html = req.body.html;

  if (!html) {
    return res.sendStatus(400);
  }

  pdf().from.string(html).to.buffer({
    renderDelay: 1000
  }, function(err, data) {
    if (err) {
      return res.sendStatus(500);
    }

    var file = fs.createWriteStream('myDocument.pdf');
    file.write(data, function(err) {
      if (err) {
        res.sendStatus(500);
      }

      res.download('myDocument');
    });
  });

});

String a ="Hello sick sad world! 213763e83456382582463456";

String a =new String("Hello sick sad world! 213763e83456382582463456");

StringBuilder sb = new StringBuilder("Hello sick sad world! 213763e83456382582463456");
String a = sb.toString();

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" sick");
sb.append(" sad");
sb.append(" world!");
sb.append(" 213763e83456382582463456");
String a = sb.toString();

2 个答案:

答案 0 :(得分:0)

字符串是有线的,很酷的东西是Java。

  1. 如果有的话,可以使用"Hello sick sad world! 213763e83456382582463456"重用现有的String对象。

  2. 分配新内存并添加值"Hello sick sad world! 213763e83456382582463456"

  3. 首先使用值StringBuilder创建一个"Hello sick sad world! 213763e83456382582463456"对象,然后在toString()方法中,它开始分配内存并在StringBuilder实现中分配值。

    < / LI>

    4,5是相同的,但是代码很短。

    StringBuilder和String用于不同的情况,StringBuilder用于使String操作高效。由于String表现为不可变,因此您可以从“字符串”构建器实现可变行为。

    你的问题的答案是1或2.如果你在字符串对象池中有一个命中,1比2快,如果不是2则快于1。

答案 1 :(得分:0)

订单是:

  • 1 - 最快
  • 2 - 第二快
  • 3 - 第三快
  • 4&amp; 5 - 等于最后

实际上,如果忽略代码加载的开销,等等,第一个例子减少为单个指针赋值。你无法改进。

其他示例都涉及至少创建一个新对象。