ERHAIMOON_学习日志(day9)

变量的作用域和生命周期

作用域(变量的使用范围)

  • 变量的作用域是指包含该变量的,离该变量最近的大括号
  • 特殊情况
    • for循环的循环变量只能在循环体内使用
    • 方法的形参只能在方法内部使用

生命周期

变量的生命周期是指变量从分配内存到回收内存的过程

变量的使用原则,尽量晚的分配内存,尽量早的回收内存

作用域和生命周期示例程序

字符串

​ 字符是单引号引住的单个符号,例如char='#',字符在java中使用char类型表示字符串是字符的序列,在java中使用String类表示字符串。String类被定义在java.lang包中,java.lang包由系统自动导入,该包中的类无需导入

字符串和字符的区别

  • 区别1
    • 字符类型:char 使用单引号
    • 字符串类型 String使用双引号
  • 区别2
    • char是基本类型
    • String是引用类型
  • 区别3
    • char类型的变量必须存储一个字符
    • String类型的变量中可以存放任意个数的字符

ASCII码

​ ASCII美国信息交换标准代码

可以交换的字符一共128个,这128个包括可见字符(后96个)和不可见字符(前32)个

显示所有ASCII码

for(int i=0;i<128;i++){
    System.out.println((i)+"="+(char)i);
}

ASCII是祖父行和整型之间的交换

字符串的两种使用方式

  • 字面量,用双引号直接赋值的就是字面量
  • 字符串对象,new的就是字符串对象
字符串对象

字符串对象就是使用new运算符创建的字符串

  • 如果要判断两个字符串内容是否相等,应该使用equals方法
  • 如果要判断两个字符串对象是否指向同一个内存单元,应该使用==

字符串在开发中频繁的使用到,如果每次使用相同的字符串时都在堆中分配内存,会发生同样的字符串分配了多次内存,导致内存浪费

字面量

字面量是直接使用双引号赋值的字符串。例如String name="洱海月"

字面量在分配内存时,被分配在方法区,方法区会独立出一块内存,专门用于存放字面量,java把单独存放字面量的内存称为字符串池。

String name1="erhaimoon";
String name2="erhaimoon";

程序运行时,第一行的值是erhaimoon,此时jvm就会到字符串池里面查找有erhaimoon吗,如果没有,则让字符串池分配内存单元给字符串erhaimoon,当执行到第二行代码时,字符串的内容也是erhaimoon,此时jvm再次查找字符串池里面有字符串erhaimoon吗,如果有就直接使用已有的erhaimoon,而不是重新为erhaimoon分配内存

==关于 和 equals

在字符串使用中经常判断是否相等,例如验证用户名和密码是否正确,两次密码一致吗?这些需求可以使用字符串是否相等来判断

判断字符串相等有两种方法

  • ==
  • equals

两者的区别:

  • ==是判断两个字符串变量的值是否相等
  • equals判断两个字符串指向的内存单元中的内容是否相同

在实际开发中判断两个字符串是否相同多数是判断两个字符串的内容是否一样,因此应该使用equals方法,不能使用==

关于equalsIgnoreCase方法

如果在判断字符串时想忽略字符串大小进行比较,应该使用equalsIgnoreCase方法,该方法用于忽略大小进行比较

String s1="erhaimoon";
String s2="Ehaimoon";
Systme.out.println(s1.equalsIgnoreCase(s2));

结果是true

String类的API

文本框中输入email,判断Email格式是否合法,合法的email必须包含@,必须包含.

String mail="erhaimoon@gmail.com";
char [] chs=mail.toCharArray();
for(int i=0;i<chs.length;i++){
    if(char[i]=="@"){
        System.out.println("合法");
        break;
    }
}
返回类型 方法名称 作用
boolean equals(String) 比较两个字符串是否相等
boolean equalsIgnoreCase(String) 忽略大小写比较两个字符串是否相等
int length() 获取串的长度
char charAt(int) 获取字符串中的一个字符
int indexOf(String) 判断传入字符串在原字符串中第一次出现的位置
int lastIndexOf(String) 判断传入字符串在原字符串中第一次出现的位置
boolean startsWith(String) 判断原字符串是否以传入字符串开头
boolean endsWith(String) 判断原字符串是否以传入字符串结尾
int compareTo(String) 判断两个字符串的大小
String toLowerCase() 获取小写字符串
String toUpperCase() 获取大写字符串
String substring(int) 截取字符串,从传入参数位置开始截取到末尾
String substring(int,int) 截取字符串,从参数1位置开始截取到参数2位置
String trim() 去掉字符串首尾空格
String spilt() 将字符串按照传入参数分割为字符串数组
String replace(String,String) 将字符串指定的内容替换成另外的内容

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1