当前位置: 首页 > news >正文

怎样才能做公司的网站什么叫优化关键词

怎样才能做公司的网站,什么叫优化关键词,wordpress 短代码 2017,php做网站需要数据库吗简单说下String、StringBuilder、StringBuffer的区别 String、StringBuffer、StringBuilder在Java中都是用于处理字符串的,它们之间的区别是String是不可变的,平常开发用的最多,当遇到大量字符串连接的时候,就用StringBuilder&am…

简单说下String、StringBuilder、StringBuffer的区别

  • String、StringBuffer、StringBuilder在Java中都是用于处理字符串的,它们之间的区别是String是不可变的,平常开发用的最多,当遇到大量字符串连接的时候,就用StringBuilder,它不会生成很多新的对象,StringBuffer和StringBuilder类似,但每个方法上都加了synchronized 关键字,所以是线程安全的;

接下来说下String的特点

  • String类的对象是不可变的,也就是说,一旦一个String对象被创建,它所包含的字符串内容是不可改变的;
  • 每次对String对象进行修改操作,比如拼接、替换等操作时,实际上都会生成一个新的String对象,而不是修改原有对象。这可能会导致内存和性能开销,尤其是在大量字符串操作的情况下;

继续说下StringBuilder的特点

  • StringBuilder提供了一系列的方法来进行字符串的增删改查操作,这些操作都是直接在原有字符串对象的底层数组上进行的,而不是生成新的String对象;
  • StringBuilder不是线程安全的。这意味着在没有外部同步的情况下,它不适用于多线程环境;
  • 相比于String,在进行频繁的字符串修改操作时,StringBuilder能提供更好的性能。Java中的字符串连+操作其实就是通过StringBuilder实现的;

StringBuffer的特点

  • StringBuffer和StringBuidler类似,但StringBuffer是线程安全的,方法前面都加了synchronized关键字;

总结下三者的使用场景

  • String:适用于字符串内容不会改变的场景,比如说作为HashMap的key
  • StringBuilder:适用于单线程环境下需要频繁修改字符串内容的场景,比如在循环中拼接或修改字符串,是String的完美替代品
  • StringBuffer:现在不怎么用了,因为一般不会在多线程场景下去频繁的修改字符串内容;

延申问下String是不可变类吗?字符串拼接是如何实现的?

  • String是不可变的,这意味着一旦一个String对象被创建,其存储的文本内容就不能被改变。这是因为:
    1. 不可变性使得String对象在使用中更加安全,因为字符串经常用作参数传递给其他Java方法,例如网络连接、打开文件等
      如果String是可变的,这些方法调用的参数值就可能在不知不觉中被改变,从而导致网络连接被篡改,文件被莫名奇妙地修改等问题
    2. 不可变的对象因为状态不会改变,所以更容易进行缓存和重用。字符串常量池的出现正是基于这个原因;
      当代码中出现相同的字符串字面量时,JVM会确保所有的引用都指向常量池中的同一个对象,从而节约内存;
    3. 因为String的内容不会变,所以它的哈希值也就固定不变。这使得String对象特别适合作为HashMap或HashSet等集合的键,因为计算哈希值只需要进行一次,提高了哈希操作的效率;

接下来回答第二个问题,字符串是如何实现的呢?

  • 例如String是不可变的,因此通过“+”操作符进行的字符串拼接,会生成新的字符串对象。
String a = "hello ";
String b = "world!";
String ab = a + b;
  • a 和 b 是通过双引号定义的,所以会在字符串常量池中,而 ab 是通过“+”操作符拼接的,所以会在堆中生成一个新的对象。

在这里插入图片描述

Java 8 时,JDK 对“+”号的字符串拼接进行了优化,Java 会在编译期基于 StringBuilder 的 append 方法进行拼接。
上面的代码相当于:

String a = "hello ";
String b = "world!";
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
String ab = sb.toString();

因此,如果笼统地讲,通过加号拼接字符串时会创建多个 String 对象是不准确的。因为加号拼接在编译期还会创建一个 StringBuilder 对象,最终调用 toString() 方法的时候再返回一个新的 String 对象。

@Override
public String toString() {// Create a copy, don't share the arrayreturn new String(value, 0, count);
}

那除了使用 + 号来拼接字符串,还有 StringBuilder.append()String.join() 等方式。

还想问下,如何保证String不可变呢?

  1. String内部类使用一个私有的字符数组来存储字符串数据。这个字符数组在创建字符串时被初始化,之后不允许被修改

    private final char value[];
    
  2. String类没有提供任何可以修改其内容的公共方法,像concat这些看似修改字符串的操作,实际上都是返回一个新创建的字符串对象,而原始字符串对象保持不变

    public String concat(String str) {if (str.isEmpty()) {return this;}int len = value.length;int otherLen = str.length();char buf[] = Arrays.copyOf(value, len + otherLen);str.getChars(buf, len);return new String(buf, true);
    }
    
  3. String类本身被声明为final,这意味着它不能被继承。这防止了子类可能通过添加修改方法来改变字符串内容的可能性;

    public  final class String
    
http://www.dt0577.cn/news/56384.html

相关文章:

  • 攀枝花网站建设公司冯耀宗seo博客
  • 新手自建网站做跨境电商域名权重查询
  • 网站建设服务市场趋势网络软文案例
  • 手机个人网页制作seo的形式有哪些
  • 网站建设开发计划模板东莞网络推广
  • 找工作一般上什么网站比较好百度竞价培训
  • 为代理赌博做网站网站关键词优化报价
  • 建造网站品牌推广策略分析
  • 谷多网站厦门人才网最新招聘信息
  • 阳江网站开发揭阳百度seo公司
  • 辽宁网站制作泉州seo代理商
  • 找人做网站排名优化企业培训内容有哪些
  • 事业单位网站建设方案书seo引擎优化软件
  • 新手做网站起步教程2022十大网络营销案例
  • 做网站页面多少钱专业seo公司
  • 网站建设自学网企业内训机构
  • 研发外包滨州seo招聘
  • 嘉兴网站seo服务seo搜索引擎推广什么意思
  • 我是做颗粒在什么网站上百度识图在线网页版
  • 淄博网站成功案例谷歌搜索引擎香港免费入口
  • 网站建设推广营销策划kol营销模式
  • 单页网站怎么优化如何成为百度广告代理商
  • 政府网站集约化建设意义百度营销客户端
  • 北京做网站建设的公司排名企业seo优化服务
  • 黄石建设网站百度流量统计
  • 做网站运营常用的网络营销方法及效果
  • 娱乐城网站开发旅游网站网页设计
  • p2p网站如何做测试工具网络营销具有哪些优势和吸引力
  • 新网站的建设方案黑帽seo技巧
  • 自己做动漫头像的网站2022年十大流行语