JavaSE学习 day07

今天,我学习了字符串比较、字符串内存比较、字符串内存对象数量、IO流与文件读写。
总结一下需要注意的问题:
1.Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
堆内存用于存放由new创建的对象和数组。
2.String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致。
public class Login {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.print("请输入用户名: ");
uname=input.next();
System.out.print("请输入密码: ");
pwd=input.next();
if( uname.equals(“TOM”) && pwd.equals(“1234567”) ){
System.out.print("登录成功! ");
}else{
System.out.print(“用户名或密码不匹配,登录失败!”);
}
}
}
3.==和equals()的区别:
==:比较的是两个字符串内存地址(堆内存)是否相等;
equals():比较的是两个字符串的内容是否相等。
4.Java为了避免产生大量的字符串对象,设计了一个字符串池(String Pool),通过初始化方式创建的字符串对象都会存在于字符串池中,且字符串池中的字符串不会重复,以便可以被共享使用,提高存储效率。
其工作原理是:
当使用初始化的方式创建对象时,JVM会首先检查字符串池中是否存在值相等的字符串,如果存在,则不进行创建,而是直接返回字符串池中该字符串的引用地址。如果不存在,则创建该对象,并放入字符串池中,返回新创建的字符串的引用地址。
当使用new关键字创建对象时,JVM仍然首先检查字符串池中是否存在要创建的字符串,如果不存在,则在字符串池中创建一个字符串对象,然后在堆内存中继续创建一个字符串对象,返回该对象的引用地址。如果存在,则只在堆内存中创建一个字符串对象,返回该对象的引用地址。
5.字符串查找:
方 法 说 明
public int indexOf(int ch) 搜索第一个出现的字符ch(或字符串value)
public int indexOf(String value)
public int lastIndexOf(int ch) 搜索最后一个出现的字符ch(或字符串value)
public int lastIndexOf(String value) 搜索最后一个出现的字符ch(或字符串value)
截取字符串:
方法 说明
public String substring(int index) 截取从位置索引开始的字符串部分
public String substring(int beginindex, int endindex) 截取beginindex和endindex之间的字符串部分
public String trim() 返回一个前后不含任何空格的调用字符串的副本
substring(int beginindex, int endindex):截取beginindex和endindex之间的字符串部分,包括位置beginindex但不包括位置endindex。
其它方法:
charAt() : 返回字符串中某个特定位置的字符
indexOf() :返回字符串中某个特定字符或子字符串首次出现的索引
toUpperCase() : 将字符串内的所有字符从小写改为大写
toLowerCase() : 将字符串内的所有字符从大写改为小写
6.Java中通过流来读写文件,流是指一连串流动的字符,是以先进先出方式发送信息的通道。
7.字节流与字符流的区别:
字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容,而字节流读取单位为byte。byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。
字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流,比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了。
8.字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
9.在开发中是使用字节流好还是字符流好呢?
使用字节流更好。所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

你可能感兴趣的:(笔记)