1.字符串的生命与初始化主要有一下两种情况:

  1. String s1=new String("abc");    String s2=new String("abc");

    1. 存在两个引用对象s1和s2,两个内容相同的字符串对象“abc”
    2. 它们哎内存中的地址时不同的;
    3. 只要用到new总会生成新的对象。
  2. String s1="abc";   String s2="abc";
    1. 在JVM中存着一个字符串池,其中保存着和多String对象,并且可以被共享使用;
    2. s1和s2引用的是同一个常量池中的对象;
    3. 创建s1时,会在字符串常量池中查找是否已经有相同的字符串被定义,其判断依据是equals(Object obj)方法的返回值。
    4. 若已经定义,则直接获取对其的引用,此时不需要创建新的对象;
    5. 若没有定义,则首先创建这个对象,然后把它加入到字符串常量池中,再将它的引用返回。
String s1="abc";
String s2="abc";
String s3=new String("abc");
String s3=new String("abc");

s1:在常量区存放了一个“abc”字符串对象;

s2:引用常量区的对象,不创建新对象;

s3:在堆中创建新的对象;引用常量区的“abc”字符串对象。

s4:在堆中创建新的对象;引用常量区的“abc”字符串对象。

String的实现采用了Flyweight的设计模式。

String类是不可变类。一旦创建好了就不可修改,所以String对象可以被共享而且不会导致程序混乱。

String s=null; s是一个字符串引用,不知想任何一个字符串;

String s=" "; s是一个字符串类型的引用,指向另外一个字符串(空串)

new String("abc");创建了几个对象?

一个或两个。如果常量池原来有“abc”,那么只创建一个。如果没有,那么就会创建两个。


2.==、equals和hashCode()

1)==

用来比较两个变量的值是否相等。

比较变量对应的内存中所存储的数值是否相同。

比较两个基本类型的数据或者两个引用变量是否相等,只能用==。

  • 基本类型:直接使用==比较;
  • 引用类型:涉及两块内存,对象本身(s)占用一个堆内存,变量(new String())占用一块内存。变量s所对应内存中存储的数值就是对象占用的那块内存的首地址。如果要比较两个变量是否指向同一个对象,就要看这两个变量所对应内存中的数值是否相等(这两个变量是否指向同一个对象)。但是==无法实现对象内容的比较。

2)equals

Object提供的方法之一。

Object中的equals(Object)直接使用==运算符比较两个对象。

在没有覆盖equals(Object)时,它与==一样,比较的是引用。

==不能被覆盖,但是equals(Object)可以,可以通过覆盖的方法让它比较数据内容。

String中的equals(Object)是用于比较两个独立对象内容是否相同。

3)hashCode()

继承于Object,用于鉴定两个对象是否相等。

Object类总的hashCode()返回对象在内存中地址转换成的一个int值。

若没有重写hashCode()则任何对象的hashCode()都是不相等的。

一般在覆盖equals方法时也要覆盖hashCode方法。否则就会违反Object.hashCode约定。


3.可对字符串操作的类String、StringBuffer、StringBuilder和StringTokenizer

Character 处理单个字符      
String 处理字符串 不可变 适合共享  
StringBuffer 处理字符串 可变 适合频繁修改 多线程
StringBuilder 处理字符串 可变 频繁修改 单线程
StringTokenizer 分割字符串 根据“ \t\n\r\f”分割(5种,有空格)    

实例化String时,可利用构造函数(String s1=new String("world");)进行初始化,也可用赋值(String s="Hello";)初始化。

实例化StringBuffer时,只能用构造函数(StringBuffer s=new StringBuffer("Hello");)进行初始化。

String字符串的修改原理:

  • 首先创建一个StringBuffer;
  • 其次调用StringBuffer的append();
  • 最后调用StringBuffer的toString()返回结果。
String s="Hello";
s+="World";

以上代码等价于

StringBuffer sb=new StringBuffer("Hello");
sb.append("World");
s=sb.toString();

执行效率低。

执行效率方面:

StringBuilder最高,StringBuffer次之,String最低。

  • 操作数据量比较小,用String;
  • 单线程操作大量数据,用StringBuffer;
  • 多线程操作大量数据,用StringBuilder.

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

然而由于 StringBuilder 的方法不是线程安全的(不能同步访问),在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。


4.数组

具有相同类型的数据的集合,一般具有固定的长度,并且在内存中占据连续的空间。

(ArrayList就是动态数组,也是一个对象。创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。)

一维数组的声明方式:

type arrayName[]
type[] arrayName
  • type既可以是基本的数据类型,也可以是类。
  • 数组被创建后会根据数组存放的数据类型初始化成对应的初始值。
  • Java数组在定义时,并不会给数组袁术分配存储空间,因此[ ]中不需要指定数组的长度。

定义数组且必须分配空间的方法为:

arrayName=new type[arraysize]

数组初始化方法:

1.int[] a=new int[5];//默认初始化为0
2.int[] a={1,2,3,4,5};

使用时可以将数组的生命和初始化分开写。

二维数组的声明方法:

1) type arrayName[][];
2) type[][] arrayName;
3) type[] arrayName[];

注:声明二维数组时,其中的[ ]必须为空。

二维数组的初始化:

type arranName[][]={{c11,c12,c13,...}.{c21,c22,c23,...},{...}...};type arrayName[][]-new type[行数][列数]

其中,二维数组的第二维长度可以不同。

二维数组的访问:

arrayName[行号][列号]

原生类:未被实例化的类。

数组一般指实例化、被分配空间的类,不是原生类。


5.length属性和length()

length属性:数组的

length():字符串的

size():计算对象大小的。查看泛型中有多少个元素。

泛型:对Java语言的类型系统的一种扩展,一直创建可以按类型进行参数化的类,可以把类型参数看做是使用参数化类型时执行的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

常用API-2(字符串与数组)相关推荐

  1. Java核心类库之(常用API、字符串类、集合类、泛型)

    目录 1 常用API 1.1 Math类 1.2 System类 1.3 Object类 1.4 Objects类 1.5 Arrays类 1.6 基本类型包装类 1.6.1 Integer类概述和使 ...

  2. 常用API、static、数组复制、双色球练习与酒店管理系统

    目录 JDK中的类(API -> 应用程序接口,工具-类) 学习类 接触过的类 软件包package: 常用类[一] 1.Random: 构造方法 new Random() 2.String - ...

  3. php中数据类型、数组排序、循环语句、混编、操作本地文件流程、常用API、函数、魔术常量

    php中数据类型: php中有7种数据类型,分别是: //1.String字符串,用引号包裹的字符,如:$str = 'hello word';//2.Integer整型,可以是正数或负数,有十进制. ...

  4. 丁鹿学堂:js字符串转数组常用方法总结

    我们在前端实际开发过程中,用的最多的是数组.而且js也为数组提供了大量的api,方便我们处理数据. 在实际开发过程中,我们经常需要做的一点就是把字符串转为数组,利用数组的数据结构和api,可以很方便的 ...

  5. 软件破解中常用API

    原生程序开发者,破解也是会用的,这里转载一些资料: 在软件破解中,常用软件破解方法就是下断点快速找事件,在命令行BP下断点,shift+f9找事件然后再alt+f9返回. 快捷方法,ctrl+A分析代 ...

  6. 破解必备,软件破解中常用API函数大全

    在软件破解中,常用软件破解方法就是下断点快速找事件,在命令行BP下断点,shift+f9找事件然后再alt+f9返回. 快捷方法,ctrl+A分析代码.ctrl+N 找要下断的API函数.右键> ...

  7. java中常用API、Scanner类、匿名对象、Random类、ArrayList类、对象数组

    java中常用API: API:Application Programming Interface,应用程序编程接口.Java API是JDK中提供给我们使用的类的说明文档.这些类将底层的代码实现封装 ...

  8. 辟邪剑法之字符串常用API

    辟邪剑法之字符串常用API 文章目录 辟邪剑法之字符串常用API 一.引言 二.字符串 1.字符串介绍 2.ES5字符串方法 1.toLowerCase() 2.toUpperCase() 3.ind ...

  9. JavaScript基础(四)对象、数组、对象与数组的常用API

    目录 一.对象 1. 对象的创建 2. 对象属性的访问 3. 遍历对象属性 4. 检测属性是否存在 5. 对象的方法 二.数组对象 1. 数组的创建 2. 访问数组 3. 数组长度 4. 数组的遍历 ...

最新文章

  1. 你的每个哈欠老板都知道!被AI摄像头全天盯紧,亚马逊快递小哥不干了
  2. 单例模式 之 单例模式——饿汉模式
  3. python ipython spyder
  4. 「版权流氓」终结者:6天时间,堆出687亿段旋律
  5. jaxp的Sax解析
  6. 计算机技术+智能化水电站,水电工程BIM用太少?水电工程BIM案例全解读
  7. android开发之shape详解
  8. 湖南(包括岳阳)的交通规划
  9. 周鸿祎卸任奇安信董事 后者具备上市条件
  10. axios_json-server的介绍与服务器搭建---axios工作笔记002
  11. python webservices_python实现webservices接口并调用
  12. mongodb 启动 WARNING: soft rlimits too low, transparent_hugepage/enabled is 'always'. never
  13. talib安装error: Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build的解决方案
  14. python 输入整数数组_Python 2中的整数数组输入
  15. csgo控制台所有代码飞天_CSGO控制台指令汇总
  16. Emscripten 单词_背单词分享 | 我觉得实用的背单词方法
  17. android本地视频 投屏,小米投屏神器
  18. Excel:动态图表展示(点击按钮选择不同的员工名字,自动呈现对应的数据展示)
  19. 计算机应用蘑菇丁周报,蘑菇钉周记(共10篇)
  20. 深度学习 warmup 策略

热门文章

  1. IBM推出云深度学习图形芯片Tesla P100 GPU加速器
  2. HttpClient 讲解 (2) 项目封装
  3. yum与rpm的详解 --用来安装软件
  4. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)
  5. 【转】使用Windows Backup备份Exchange 2007 SP2和Exchange 2010
  6. 在对人的管理上,项目经理应该做些什么?
  7. vlan间ACL和VACL的区别
  8. 装好了ubuntu,w2k却无法启动了,:(
  9. Pytorch中图像预处理相关函数
  10. 小白html图片添加文字,小白爬虫入门——爬取图片和文字(超详细)