- String是一个类,属于引用类型。字符串定义后,其值不可更改是一个常量。
如果要频繁更改字符串中的值,建议使用StringBuilder类或StringBuffer类。
//100次的循环,会创建100个字符串对象,但最终只有最后的字符串对象对str引用. //其余字符串均为“垃圾” System.out.println("程序执行开始"); String str = "a"; for (int i=0;i<100;i++){ str+=i; } System.out.println("程序执行结束"); //由此可见,如果要频繁更改String类型变量的值。 //不要使用String对象操作字符串,效率会很低又浪费内存空间。创建字符串方法
- 使用""赋值创建
String str = "hello world";
- 通过构造方法创建
常用构造方法 说明 String() 创建一个空白字符串对象,实际创建一个空字符数组 。 String(String str) 创建一个指定的字符串对象,实际是创建一个形参字符串的副本。 String(char[] list) 创建一个指定字符数组的字符串对象。 String(byte[] list) 按默认编码格式创建一个指定字节数组的字符串对象。 String(byte[] list,String charsetName) 按指定的编码格式创建一个指定字节数组的字符串对象。
- 在使用字符串时,如果要比较其值是否相同,不要使用"=="进行判断。因为使用等号比较的是其内存地址。
- 在使用equals方法时,通常要将已知的非空字符串作为调用者。
//如果这样写,在password变量为null的情况下,运行时会报空指针异常错误。 password.equals("123456"); //像这样将已知非空的字符串作为调用对象,就可以避免空指针异常。 "123456".equals(password);
可变字符串 StringBuilder类
- 用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率 略高于StringBuffer。
- 用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。
- 俩者方法作用都一致。只不过StringBuffer中的方法使用了synchronized关键字修饰,表示同步方法,在多线程环境下不会出现问题。( 所以这里以StringBuilder为例。)
常用构造方法 | 作用 |
StringBuilder() | 创建一个大小为16的字符数组。类似于String str=""; |
StringBuilder(int capacity) | 创建一个指定大小的字符数组 |
StringBuilder(String str) | 创建一个str长度+16的字符串数组后,将str添加到其中。类似于String str="初始值"; |
方法 | 作用 |
append(Object obj) | 将指定内容添加到原可变字符串对象末尾 |
delete(int start,int end) | 删除[start,end)范围内的字符 |
deleteCharAt(int index) | 删除指定索引的字符 |
insert(int index,Object obj) | 将obj添加到index位置上 |
replace(int start,int end,String str) | 将[start,end)范围内的字符替换为str |
reverse() | 翻转原字符串 |
- 以上方法都是在直接操作字符串,每个方法调用后,原字符串都会发生变化。
- StringBuilder或StringBuffer中并没有重写equlas方法,所以要比较两个可变字符串对象的值是否相同时,需要将可变字符串对象转换为String对象后,调用equals方法比较。
-
在程序中,如果要频繁操作某个字符串,一定使用可变字符串类StringBuilder或StringBuffer创建对象。
- 有些方法如indexOf()、charAt()等,在String和StringBuilder中都存在,可以不用转换。
- 但有些方法如getBytes()、contains()等,只能通过String调用,这时就需要进行转换。
- 通过创建一个可变字符串对象,将不可变字符串作为参数实现转换
//定义一个不可变字符串对象 String str="hello"; //创建一个可变字符串对象,将不可变字符串对象作为参数 StringBuilder sb = new StringBuilder(str);可变字符串转换为不可变字符串
- 通过调用可变字符串的toString()方法实现转换
//创建一个可变字符串对象 StringBuilder sb = new StringBuilder("hello"); //调用toString()转换为String类型 String str=sb.toString();System类
- 这个类包含了一些系统相关的信息和操作数组的方法。其中的方法和属性都是静态的。
常用属性和方法 作用 System.in 获取系统输入流对象,通常用于获取输入信息。 System.out 获取系统打印输出流对象,通常用于打印普通信息。 System.err 获取系统打印输出流对象,通常用于打印异常信息。 System.exit(int statues) 终止虚拟机运行,0表示正常结束。 System.getenv(String key) 获取系统指定环境变量信息。 System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,原数组要赋值的元素数量) 将原数组中指定长度的元素复制到新的数组中。 System.currentTimeMills() 获取从1970.1.1 0:0:0(UTC)至今经过了多少毫秒。中国是UTC(+8),所以是从1970.1.1 8:0:0至今经过了多少毫秒,返回long类型。
- Runtime类的对象,用于表示程序运行时对象(获取运行环境对象)
- 包含了程序运行环境相关的信息,常用于获取运行环境信息(如虚拟机内存)或执行某个命令
- 这个类不是一个抽象类,但不能创建对象,因为其构造方法是私有的。
- 可以通过它的一个静态方法getRuntime()获取一个Runtime类对象。
- Java是纯面向对象语言,宗旨是将一切事物视为对象处理。
- 原始类型不属于对象,不满足面向对象的思想,但原始类型使用时无需创建对象,保存在栈中,效率更高。
- 包装类就是原始类型对应的类型。包装类通常用于将字符串转换为对应的原始类型。
- 在web应用中,从浏览器中获取到后台的数据,全是String类型,一定要使用转换的方法。
包装类 原始类型 将字符串转换为原始类型 Byte byte Byte.parseByte(String str) Short short Short.parseShort(String str) Integer int Integer.parseInt(String str) Long long Long.parseLong(String str) Float float Float.parseFloat(String str) Double double Double.parseDouble(String str) Boolean boolean Boolean.parseBoolean(String str) Character char 无
- 八个原始类型中,除了int和char之外,其余类型的包装类,都是将首字母改为大写。int为Integer,char为Character。
- 除了Character类之外,其余类都有至少两个构造方法:参数为原始类型或字符串的构造方法。Character的构造方法只有一个,参数为char变量。
- 除了Character类之外,其余类都有静态方法parse原始类型(String str),用于将字符串转换为相应的原始类型
- 数值型的包装类的parseXXX()方法,如果不是一个真正的对应类型的数,转换时会抛出NumberFormatException异常。如"123abc"、"123.456"都不能使用Integer.parseInt()转换
- Boolean类型中的parseBoolean()方法,参数如果是"true"这个单词,无论大小写,都能转换为真正的boolean值的true,只要不是"true"这个单词,转换结果都为false
- 除了Boolean类之外,其余类都有MAX_VALUE和MIN_VALUE这两个静态属性,用于获取对应原始类型支持的最大最小范围
- 所有包装类中都有一个compareTo(参数1,参数2)方法,用于比较两个参数
- 如果是数值型,参数1>参数2返回1,参数1<参数2返回-1,相同返回0
- 如果是Boolean型,两个参数相同返回0,不同时,如果参数1为true返回1,否则返回-1
- 如果是Character型,返回参数1-参数2的值。
- 所有包装类中都有toString()方法,用于将包装类对象转换为String字符串对象
作为一个还不算小白的我,并且没有经历过社会的毒打与考验。自己依然坚定能开发行业当中创出一片属于自己的白云蓝天。内容可能有点抽象,只有不断地尝试,不断地敲代码。俗话:时间才是检验真理的唯一标准。学习如此,生活亦如此。只有不断尝试,不断经历,不断犯错。才能找到完美的自己。活得更像自己。所以虽抽象,多多练习,多多尝试,有的东西不懂也会从体会中慢慢地理解。只有磨平生活的棱角,才会体会得到生活的本质。