字符串池:1.字符串池位于堆内存中一小块空间,用来保存若干个字符串的地址值;
2.字符串池当中不会出现重复字符串对应的地址,来保证字符串不重复;
3.直接双引号的字符串默认在池中,而new出来的均不在池中。
String str1 = "abc"; String str2 = "abc"; System.out.println(str1 == str2);//true,都在池中,均为指向"abc"的同一地址 char[] arr = {'a', 'b', 'c'}; String str3 = new String(arr); String str4 = new String(arr); System.out.println(str3 == str4);//false,new的不在池中,地址不同 System.out.println(str1 == str3);//false
注意:a) 对字符串内容比较,要使用equals方法(具有对称性);
b) 俩个字符串比较当中,有一个是常量,尽量将常量写在前面。
String str = null; System.out.println("abc".equals(str));//false,正常运行 System.out.println(str.equals("abc"));//报错NullPointerException,str无对象,没有成员方法
!!!字符串内容不会改变,新的字符串都是新创建的,改变的只是地址!!!
ArrayList类:ArrayList <泛型> 集合名 = new ArrayList <> ( );
泛型只能是引用类型或包装类(Integer,Character······)!
ArrayList<String> list = new ArrayList<>(); list.add("hello");//添加元素 list.get(0);//获取hello,索引 list.size();//获取集合大小,1
IO流:
//import java.io.FileWriter包下 FileWriter fw = new FileWriter("File.txt");//File.txt文件创建在package包下的路径 fw.writer("hello");//写入 fw.close();//关闭
注意:1.若文件不存在则创建,若已存在,则覆盖原来内容;
2.不想覆盖原来内容,构造方法应使用new FileWriter("File.txt", true);
//import java.io.FileReader包下 FileReader fr = new FileReader("File.txt");//读取 int ch = fr.read();//读取一个字符,返回的是ASCII值 fr.close(); ====================================================================== //读取字符数组 FileReader fr = new FileReader("File.txt");//若文件内容为hello char[] buf = new char[2];//一次读取2个字符的缓存数组 int len;//读取的有效数字 while((len = fr.read(buf)) != -1){ String str = new String(buf, 0, len);//从buf数组下标0开始的len个字符 System.out.println(str);//he, ll, o } fr.close();
为减少硬盘的性能消耗,提高效率,输入输出流还可以加缓冲区:
FileWriter fw = new FileWriter("File.txt"); BufferedWriter bw = new BufferedWriter(fw);//先写入最大8192个字节存入缓冲区,存满后转移至硬盘中 bw.writer("hello"); bw.close(); =========================================================================================== FileReader fr = new FileReader("File.txt"); BufferedReader br = new BufferedReader(fr);//先从硬盘读取最大8192个字节至缓冲区,按需读取 int ch = br.read(); br.close();
眼高手低,重在练习!!!
JAVA要点_3
最新推荐文章于 2024-08-20 14:34:44 发布