一. 包装类

1. 为什么要定义包装类

  • 为每一种基本数据类型定义包装类,可以在包装类中定义操作该基本类型的属性和方法
  • 在定义属性时,可以把数据类型定义为包装类,使用起来和基本类型一样(可以自动装箱,拆箱),关键默认值可以为null,更加符合实际场景。
基本类型 包装类 属性 方法
byte Byte MAX_VALUE MIN_VALUE parseByte(字符串)
short Short MAX_VALUE MIN_VALUE parseShort(字符串)
int Integer MAX_VALUE MIN_VALUE parseInt(字符串)
long Long MAX_VALUE MIN_VALUE parseLong(字符串)
float Float MAX_VALUE MIN_VALUE parseFloat(字符串)
double Double MAX_VALUE MIN_VALUE parseDouble(字符串)
boolean Boolean parseBoolean(字符串)
char Character MAX_VALUE MIN_VALUE

包装类是类,类就是引用类型,引用类型的值可以为null

null有什么好处呢?null就是一个表示没有值的意思

1. 自动装箱

可以直接把一个基本类型数据赋值给该类型包装类的对象

2. 自动拆箱

把一个包装类的对象,可以直接赋值给一个基本类型的变量

package com.qf;public class Demo03 {public static void main(String[] args) {/** Integer 只有有参构造方法,要定义一个整数参数*/Integer i = new Integer(5);/** 可以直接把一个int类型数据赋值给Integer对象* 自动装箱*/Integer ii = Integer.valueOf(6);  // new Integer(6);/** intValue()  获取当前Integer的整数值*/int i2 = ii.intValue();/** 把一个Integer类型的对象,可以直接赋值给一个int类型的变量* 自动拆箱*/int i3 = ii;  // ii.intValue();/** byte  Byte * short    Short* int      Integer* long   Long* float     Float* double   Double*/Double d = 3.14;   //new Double(3.14)      自动装箱double d2 = d;     //d.doubleValue()       自动拆箱//把其他类型的自动装箱和拆箱写出来Byte b = 4;      // new Byte(4);byte b2 = b;        //b.byteValue();Boolean b3 = true;boolean b4 = b3;}
}
package com.qf;public class Demo02 {public static void main(String[] args) {Student stu = new Student();stu.age = 17;   //自动装箱int age = stu.age;  //自动拆箱System.out.println(stu);}
}class Student {/** from now on* 在一个类中,如果属性的数据类型为基本类型,那么就需要定义为该基本类型的包装类* 因为包装类可以为null,更加符合我们具体的场景* * 包装类的变量和基本类型的变量用起来一样,因为有自动装箱和自动拆箱*/String name;Integer age;     // age=null@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}//定义属性使用包装类,用起来和基本类型一致,还可以为null
class Emp {private String name;private Integer age;private Double salary;private Boolean isManeger;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Double getSalary() {return salary;}public void setSalary(Double salary) {this.salary = salary;}public Boolean getIsManeger() {return isManeger;}public void setIsManeger(Boolean isManeger) {this.isManeger = isManeger;}}

二. 字符串

什么是字符串:

由多个字符组成的内容或者信息,我们成为字符串,使用String数据类型来表示。

1. 字符串的定义

String 变量名 = "字符串值";
//以及下面所有的构造方法
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence { //String 构造方法public String() {this.value = "".value;}public String(String original) {this.value = original.value;this.hash = original.hash;}public String(char value[]) {this.value = Arrays.copyOf(value, value.length);}public String(char value[], int offset, int count) {//方法体}public String(int[] codePoints, int offset, int count) {//方法体}public String(byte bytes[], int offset, int length, String charsetName){}public String(byte bytes[], int offset, int length) {}//重写了toStringpublic String toString() {return this;}}

2. 字符串对象的创建


3. 重写equals方法

String 重写了equals方法,比较两个字符串的逻辑: 如果两个字符串中的值相等,那么就返回true

    public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {//强制类型转化String anotherString = (String)anObject;//value为String类属性,表示的是字符串的值//通过length属性,获取字符串中有多少个字符int n = value.length;   //比较两个字符串的长度是否一样,如果不一样直接返回falseif (n == anotherString.value.length) {//把两个字符串的值,转化为字符数组char v1[] = value;char v2[] = anotherString.value;//逐个的比较两个字符串中的字符,只要有一个不相等,就直接返回falseint i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}//如果两个字符串中的值相等,那么就返回truereturn true;}}//如果数据类型不一致,返回falsereturn false;}
package com.qf;public class Demo05_2 {public static void main(String[] args) {String str1 = "jackma";String str2 = "jackma";//str1,str2都指向到常量池中的相同的常量对象boolean r1 = str1 == str2;        //trueboolean r2 = str1.equals(str2);  //trueSystem.out.println(r1);System.out.println(r2);System.out.println("--------------------------------------------");String str3 = new String("jackma");String str4 = new String("jackma");//str3,str4分别指向堆中不同的对象boolean r3 = str3 == str4;         // false//String字符串重写了equals方法,逻辑就是比较两个字符串的值boolean r4 = str3.equals(str4);    // trueSystem.out.println(r3);System.out.println(r4);System.out.println("--------------------------------------------");boolean r5 = str1 == str4;          //falseboolean r6 = str2 == str4;            //falseboolean r7 = str1.equals(str4);     //true   boolean r8 = str2.equals(str4);     //true  }
}

4. String 定义的字符串不可改变

String 定义变量是不能被修改的,修改只是变量的指向。

image-20220413151943467[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Nnbx6RO-1650637915890)(D:\千峰\作业\05文件\day17\03_随堂笔记\image-20220413151943467.png)]
package com.qf;public class Demo05_3 {public static void main(String[] args) {/** String 定义的字符串不能被修改*/String str = "jackma";System.out.println(str);str += " hello";System.out.println(str);}
}

5. 字符串的常用方法

//根据下标获取字符
public char charAt(int index);
//判断当前字符串中是否包含str
public boolean contains(String str);
//将字符串转换成数组。
public char[] toCharArray();
//查找str⾸次出现的下标,存在,则返回该下标;不存在,则返回-1
public int indexOf(String str);
//返回字符串的长度
public int length();
//去掉字符串前后的空格
public String trim();
//将⼩写转成⼤写
public String toUpperCase();
//判断字符串是否以str结尾
public boolean endsWith(String str)
//将旧字符串替换成新字符串
public String replace(char oldChar,char newChar);
//根据str做拆分
public String[] split(String str);
//在字符串中截取出⼀个⼦字符串
public String subString(int beginIndex,int endIndex);
package com.qf;import java.util.Arrays;public class Demo05_4 {public static void main(String[] args) {//String 常用的方法/** char charAt(int index);  获取指定下标的字符   * 1. 字符串中每个字符都有一个下标* 2. 下标从0开始,每次自增1*/String str = "jackma";char c = str.charAt(4);System.out.println(c);/** boolean contains(String str);  判断当前字符串中是否包含str*/str = "jackma";boolean b1 = str.contains("j");boolean b2 = str.contains("jak");System.out.println(b2);/** char[] toCharArray();    将字符串转换成数组。* 数组中元素的顺序和字符串的顺序一致*/str = "jackma";char[] charArray = str.toCharArray();System.out.println(Arrays.toString(charArray));/** indexOf获取字符串* 1. 如果参数为一个字符,获取其 首次 出现的下标* 2. 如果参数为多个字符,获取其第一个字符  首次出现的下标*     2.1 前提一定包含此字符串* 3. 如果不包含该字符串,直接返回-1*/str = "jackma";int index1 = str.indexOf("j");int index2 = str.indexOf("a");int index3 = str.indexOf("ck");  // 包含的ck中c的下标int index4 = str.indexOf("ckn");  // -1System.out.println(index4);/** lastIndexOf()  获取最后一次出现的下标  如果不包含返回-1*/str = "jackma";int index5 = str.lastIndexOf("a");System.out.println(index5);//三国.演义.ppt  获取点的下标/** int length(); 返回字符串包含字符的长度(个数)* 空格也是一个字符*/str = "jackma ";int len = str.length();System.out.println(len);//结合charAt() 遍历字符串for(int i=0; i<str.length(); i++) {System.out.println(str.charAt(i));}/** String trim();  去掉字符串 前后 的空格* 只能去除前后的空格,不会去除中间的空格*/str = " jack ma ";str = str.trim();System.out.println(str);/** String toUpperCase();  将小写转成大写*/str = "jackma";str = str.toUpperCase();System.out.println(str);/** toLowerCase();  将大写转成小写*/str = "JACKMA";str = str.toLowerCase();System.out.println(str);/** boolean endsWith(); 判断字符串是否以str结尾*/str = "jackma";boolean b3 = str.endsWith("kma");System.out.println(b3);/** boolean startsWith(String str) 判断字符串是否以str开头*/str = "jackma";boolean b4 = str.startsWith("jd");System.out.println(b4);/** 根据str做拆分,把拆分的每一份都放到数组中*/str = "aa,bb,cc";String[] arr = str.split(","); // {"aa","bb","cc"}String[] arr2 = str.split("bb"); // {"aa,",",cc"}System.out.println(Arrays.toString(arr2));/** * String subString(int beginIndex); 截取字符串*         从此beginIndex下标开始截取,包含此下标,一直到最后* * String subString(int beginIndex,int endIndex); 截取字符串*       从此beginIndex下标开始截取,一直截取到endIndex下标的位置*       包含beginIndex下标字符,不包含endIndex下标字符  (包含前不包含后)* * */str = "abcdefg";String str2 = str.substring(2);   //bcdefg  cdefgSystem.out.println(str2);String str3 = str.substring(0, 2); System.out.println(str3);  //ab/** 基本类型转为字符串*/int i = 6;String str4 = ""+i;double d = 3.14;String str5 = ""+d;float f = 4.4f;String str6 = String.valueOf(i);}}

更多方法参考手册

三. 可变字符串

意思就是当进行字符串拼接时,不再常量池创建新的常量对象

  • StringBuffer

    • 线程安全
  • StringBuilder
    • 线程不安全

两个对象的用法,一模一样

package com.qf;public class Demo06 {public static void main(String[] args) {/** 我们使用可变字符串的目的,就是在操作字符串时,不再创建新的字符串常量* 底层操作的就是会自动扩容的字符数组*/StringBuffer sf = new StringBuffer();StringBuilder sd = new StringBuilder();//append(字符串)  追加  拼接字符串 sf.append("hello"); sf.append(" world");sf.append("!");System.out.println(sf);sd.append("吃了"); sd.append("吗");sd.append("!");System.out.println(sd);}}
package com.qf;public class Demo06_2 {public static void main(String[] args) {StringBuffer sf = new StringBuffer();//append:拼接字符串sf.append("hello"); sf.append("world");// insert 在执行位置插入sf.insert(2, "www");System.out.println(sf);//delete   hewwwlloworldsf.delete(0, 2);  //包含前 不包含后System.out.println(sf);     //replace替换   wwwlloworldsf.replace(0, 2, "pppp");  //包含前 不包含后System.out.println(sf);//length()  获取字符串长度int length = sf.length();System.out.println(length);}}

java学习日记 - 字符串相关推荐

  1. 尚学堂Java学习日记Day3

    尚学堂Java学习日记Day3 第三天老师先回顾了昨天的内容我从回顾中掌握了新的知识 如下图所示 int与double计算,输出类型为double的不同结果 会把int转成double类型的,这是隐式 ...

  2. Java学习日记1——基础认知

    Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...

  3. Java学习日记-Day01

    Java学习日记-Day01 Java语言概述 比特(byte)与字节 内存 Java基础知识图解 人机交互方式 常用的DOS命令 常用快捷键 计算机编程语言介绍 第一代语言 第二代语言 第三代语言 ...

  4. Java学习日记:UI篇(6)--谢尔宾斯基地毯图

    Java学习日记:UI篇(6)–谢尔宾斯基地毯图 引言:谢尔宾斯基地毯是数学家谢尔宾斯基提出的一个分形图形,谢尔宾斯基地毯和谢尔宾斯基三角形基本类似,不同之处在于谢尔宾斯基地毯采用的是正方形进行分形构 ...

  5. Java学习日记8:文件上传工具类的实现和服务器给客户端发送图片

    文件上传的工具类: 每次文件上传要写很多东西,把这些封装成一个工具类,以后用起来就会方便很多. 先创建一个类存储上传文件的信息: package com.upload; /*** 每上传成功一个文件的 ...

  6. 【日记】Java学习日记(第63天)持续无聊更新

    前言 Youtube上EJ Media(up主)的视频我依次学完了HTML.CSS.Javascript.Jquery.觉得他教得挺好的(短小精悍),就继续学他教的JAVA.感觉EJ教的都是些语法什么 ...

  7. Java学习笔记--字符串和文件IO

    1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1. ...

  8. 尚学堂Java学习日记Day1

    尚学堂学习日记Day1 #今天开始写学习博客记录自己学习java的点滴成长历程,希望能成为学弟学妹们的前车之鉴. 先大概的自我介绍下,我原本从事的是网络工程师,学习的是Cisco(思科)并拥有CCNP ...

  9. Java学习之字符串

    /*字符串:字符串就是一系列字符的序列.在java语言中字符串是一对双引号("")括起来的字符序列 声明:字符串常量 与 字符常量不同,字符常量是用单引号(')括起来的字符,而字符 ...

最新文章

  1. php鼠标经过显示文本,jQuery实现鼠标单击网页文字后在文本框显示的方法
  2. 世界编程大赛一等奖作品(转载)
  3. HTML5 audio与video标签实现视频播放,音频播放
  4. PDF.NET数据开发框架实体类操作实例(for PostgreSQL,并且解决自增问题)
  5. PHPMailer目录和命名空间没有错,但是始终class not found,的原因和解决方法
  6. sqlite的交叉编译及移植 -转
  7. ZOC7 for Mac破解版激活方法附注册码
  8. 基于stm32单片机外文文献_单片机STM32外文文献翻译、中英文翻译
  9. UCSC Xena:癌症基因组学数据分析平台
  10. ad18常用快捷键可以修改吗_AD18的常用操作及快捷键
  11. Linux服务器跑机器学习代码报错记录
  12. 台达PLC实现远程下载程序
  13. 【拼图游戏】自选图片拼图--基于pygame实现
  14. 什么是SEM?SEM是否包括SEO?
  15. 背光模块市场现状研究分析与发展前景预测报告
  16. VUE设置浏览器icon图标
  17. 【Matplotlib】 标注摄氏度符号
  18. 10个装机最贵与免费的十大软件下载
  19. Python批量读取公司年报并进行情感分析--代码实战
  20. 经济学原理笔记-微观CP11-公共物品和公共资源

热门文章

  1. 11. Windows应用程序常用控件
  2. 软件项目技术点(2)——Canvas之获取Canvas当前坐标系矩阵
  3. 关于坦克大战的简单移动以及子弹发射
  4. 红十字救护员急救知识培训笔记
  5. jar命令查看查找搜索 jar, war 文件内容
  6. IDEA如何打包war文件
  7. windows结束进程
  8. vue 启动项目报错 npm run serve
  9. FFmpeg源代码简单分析-通用- 内存的分配和释放(av_malloc()、av_free()等)
  10. 意法半导体(ST)迎接中国数字新时代