zoukankan      html  css  js  c++  java
  • String

    关于String类:

          Java.lang.String类使用finnal修饰,不能被继承,String是常量,其对象一旦构造就不不再改变,所有对String值发生的改变实际上是将该String的值赋给构造成新的String类;

    关于String数据内存:

    编码方式:

          Java字符串在内存中采用unicode编码方式,即任何一个字符(无论中文还是英文)都算一个字符长度,占用两个字节定长编码;

    常量池:

         Java在声明创建一个静态String类型数据时,选择在常量池,  所谓常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。在常量池,java会尝试尽量使用同一个对象,对于重复出现的字符串常量,JVM首先会在常量池中查找,如果存在,就返回该对象。

    1  String str1 = "abc";
    2  String str2 = new String("abc");

          对于1 中的 String str1 = "abc",首先会检查字符串常量池中是否含有字符串abc,如果有则直接指向,如果没有则在字符串常量池中添加abc字符串并指向它.所以这种方法最多创建一个对象,有可能不创建对象。

         对于2中的String str2 = new String("abc"),首先会在堆内存中申请一块内存存储字符串abc,str2指向其内存块对象。同时还会检查字符串常量池中是否含有abc字符串,若没有则添加abc到字符串常量池中。所以 new String()可能会创建两个对象。

    String的匹配相等问题:

        比对象的内容是否相等使用equals(),比较两个引用是否指向同一个对象时用==;

    关于StringBuffer:

        AbstractStringBuilder是StringBuffer的父类,定义了一些字符串的基本操作,比如append、insert、indexOf等公共方法。

    未完,待续......
  • 相关阅读:
    (Vedctor经典)A
    C++ map用法
    (约瑟夫应用)5.4.1 Roman Roulette
    部分题集代码
    随机生成数
    如何在AutoCAD中实现鼠标双击事件
    浅谈JS之Error对象
    自定义微信小程序swiper轮播图面板指示点的样式
    物理像素与逻辑像素相关概念
    微信小程序中padding-right和margin-right无效
  • 原文地址:https://www.cnblogs.com/zhishiyv/p/9576775.html
Copyright © 2011-2022 走看看