String类(接上篇)

字符串的拆分

public class Test1_1_2_1 {public static void main(String args[]){String str = "hello world";String result[] = str.split(" ");  //以空格作为间隔for(int x=0;x<result.length;x++){System.out.print(result[x]+"、");}System.out.println();String result2[] = str.split("");   //字符串全部拆分for(int y=0;y<result2.length;y++){System.out.print(result2[y]+"、");}}
}
//结果:    hello、world、
//      h、e、l、l、o、 、w、o、r、l、d、

如果split()方法中设置的是一个空字符串,那么就表示全部拆分。

public class Test1_1_2_1 {public static void main(String args[]){System.out.println();String result3[] = str.split(" ",3);//拆分为指定个数for(int z=0;z<result3.length;z++){System.out.println(result3[z]);}}
}
//结果:    hello
//      world
//      !!!

上面这个程序设置了拆分个数。

String类的其他方法

//去掉字符串左右空格
public class Test1_1_2_2 {public static void main(String args[]){String str = "  hello  world  ";System.out.println(str.trim());}
}

trim()只能删除左右空格,无法删除中间空格。
为了删除字符串中间的空格,我们可以使用replaceAll()实现空格删除。

public class Test1_1_2_2 {public static void main(String args[]){String str = "  hello  world  ";System.out.println(str.replaceAll(" ",""));}
}
//实现首字母大写的操作
public class Test1_1_2_3 {public static void main(String args[]){String str = "hello";System.out.println(initcap(str));}public static String initcap(String temp){return temp.substring(0,1).toUpperCase()+temp.substring(1);}
}

this关键字

在java中this可以完成三件事情:
1.调用本类属性
2.调用本类方法
3.表示当前对象

1.调用本类属性

class Book6 {private String title;private double price;public Book6(String title, double price) {title = title;price = price;}public String getTitle() {return "书名:" + title + ",价格:" + price;}
}
public class Test1_1_2_4 {public static void main(String args[]){Book6 book = new Book6("java开发",89.2);System.out.println(book.getTitle());}
}
结果:书名:null,价格:0.0

产生这样的结果的原因是,在java中的变量使用具备“就近使用”的原则,在构造方法中已经存在title和price变量名称,所以如果直接调用title或price变量将不会使用类中的属性,只会使用方法中的参数,所以此时Book类的构造方法是无法为title或price属性赋值的,如下:

在这种情况下为了可以明确地找到要访问的变量属于类中的属性,需要在变量前加上this,这样就可以准确地进行属性的标记。

class Book6 {private String title;private double price;public Book6(String title, double price) {this.title = title;//this属性表示的是本类属性,这样即使与方法中的参数重名也可以明确定位。this.price = price;}public String getTitle() {return "书名:" + title + ",价格:" + price;}
}
public class Test1_1_2_4 {public static void main(String args[]){Book6 book = new Book6("java开发",89.2);System.out.println(book.getTitle());}
}

调用本类方法

class Book7{private String title;private double price;public Book7(){System.out.println("一个新的Book7类对象产生");}public Book7(String title){this();                             //调用本类无参构造方法this.title = title;}public Book7(String title,double price){this(title);                        //调用本类有参构造方法this.price = price;         }public String getTitle(){return "书名:"+this.title+",价格:"+this.price;}
}
public class Test1_1_2_5 {public static void main(String args[]){Book7 book = new Book7("java开发",89.2);System.out.println(book.getTitle());}
}

在使用this调用构造方法时,存在两个重要限制:
1.使用this()调用构造方法形式的代码只能放在构造方法的首行;
2.进行构造方法互相调用时,一定要保留调用的出口(即避免出现构造方法递归调用造成死循环的错误)。

表示当前对象

class Book8{public void print(){System.out.println("this="+this);//this就是当前调用方法的对象}
}
public class Test1_1_2_6 {public static void main(String args[]){Book8 book1 = new Book8();System.out.println("book1="+book1);book1.print();                   //此时book1为当前对象Book8 book2 = new Book8();System.out.println("book2="+book2);book2.print();                  //此时book2为当前对象}
}
//结果:    book1=Book8@34a245ab
//      this=Book8@34a245ab
//      book2=Book8@7cc355be
//      this=Book8@7cc355be

引用传递

引用传递的核心意义:同一块堆内存空间可以被不同的栈内存所指向,不同的栈内存可以对同一堆内存进行内容的修改。

public class Test1_1_2_7 {public static void main(String args[]){String msg = "Hello";fun(msg);System.out.println(msg);}public static void fun(String temp){temp = "world";}
}
//结果:Hello

所有的变更都是在fun()方法中完成的,一旦fun()方法执行完毕temp将失效,其对应的内存也将变成垃圾。

对象比较

String类里面的equals()方法也属于对象比较操作。

class Book9{private String title;private double price;public Book9(String title,double price){this.title = title;this.price = price;}public String getTitle(){return this.title;}public double getPrice(){return this.price;}
}
public class Test1_1_2_8 {public static void main(String args[]){Book9 b1 = new Book9("java开发",79.8);Book9 b2 = new Book9("java开发",79.8);if(b1.getTitle().equals(b2.getTitle())&&b1.getPrice()==b2.getPrice()){System.out.println("是同一个对象");}else{System.out.println("不是同一个对象");}}
}
//结果:是同一个对象
class Book10{private String title;private double price;public Book10(String title,double price){this.title=title;this.price=price;}public boolean compare(Book10 book){if(book==null){return false;}if (this==book){    //内存地址相同return true;}if (this.title.equals(book.title)&&this.price==book.price){     //属性判断return true;}else{return false;}}
}
public class Test1_1_2_9 {public static void main(String args[]){Book10 b1=new Book10("Java开发",79.8);Book10 b2=new Book10("Java开发",79.8);if (b1.compare(b2)){    //对象比较System.out.println("是同一个对象");}else{System.out.println("不是同一个对象");}}
}
//结果:是同一个对象

通过上面的例子可以发现对象比较的操作有如下4个特点:
1.本类接收自己的引用,再与本类当前的对象(this)进行比较;
2.为了避免NullPointerException的产生,应该增加一个null的判断;
3.为了防止浪费性能的情况出现(要判断的属性会多),可以增加地址数值的判断,因为相同的对象地址相同;
4.进行属性的一次比较,如果属性全部相同,则返回true,否则返回false。

Java学习总结:6相关推荐

  1. Java学习路线图,如何学习Java事半功倍?

    作为一个初学者想掌握Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确的告诉你学习这事本来 ...

  2. Java学习必不可少的网站,快收藏起来

    java技术在IT互联网行业的发展前景一直在提升,越来越多的人都在学习java技术,今天小编来给大家提供一些学习Java的网站集合,希望能够帮助到正在学习java技术的同学. Java学习必不可少的网 ...

  3. 分享五款java学习辅助工具,总有你用的上的~

    想要学好java技术,除了自身的努力,辅助工具也不缺少,辅助工具可以帮助大家在今后的工作中可以提高工作效率,下面小编就来分享五款java学习辅助工具,总有你用的上的~ 五款java学习辅助工具: 1. ...

  4. Java学习从入门到精通的学习建议

    想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此.如:基础语法.核心类库.面向对象编程.异常.集合.IO流等基础如果学不好,那么后边更深入的语法也不容易学会. ...

  5. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  6. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  7. JAVA学习资源网站

    中文java技术网--http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)-- 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

  8. 我的WEB之路(一)-2.JAVA学习路线

    第一阶段:针对性夯实JAVA基础 课程名称 核心要点 完成目标 Java基础入门 搭建Java开发和运行环境等,IDE工具的学习和使用,Java语言基础,数据类型,运算符,条件和循环,数组使用等,Ja ...

  9. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  10. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

最新文章

  1. C#基础知识整理:基础知识(10) 静态
  2. 新内容,新交互”全球视频云创新挑战
  3. 科幻电影系列-计算机技术
  4. java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
  5. [Leedcode][JAVA][第1431题][拥有糖果最多的孩子][暴力][六一儿童节]
  6. selenium IDE的基本命令
  7. ora-04098 触发器无效且未通过重新验证
  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (4)Gradient Descent
  9. copy linux file to mac,Mac Linux互相传递文件
  10. Linux中vi/vim编辑器的常用命令
  11. 单元测试总结反思_考试后的总结与反思600字
  12. 求平方根java实现
  13. java每日一练(19_03_23)
  14. 全国计算机考试北京报名时间2015年,北京市2015年9月全国计算机等级考试报名时间...
  15. bootstrap黑色酷炫IT行业个人博客模板
  16. Kademlia详解 (转贴NeoRagex2002)
  17. 计算机一级 单元格尺寸设置,如何调整设置excel表格单元格大小一样大
  18. OnlyOffice官方Demo必要的修改及参数解释
  19. [转载]机器人工程师的漫漫长路
  20. 皮皮安学习Java第八天

热门文章

  1. Linux 下安装cnpm淘宝镜像命令npm
  2. ATS无法缓存QQ音乐的音频文件问题
  3. 使用git上传代码到github
  4. 构造函数以及this
  5. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
  6. Python学习 day01打卡
  7. BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
  8. Kubernetes入门
  9. 猎豹MFC--列表控件ListControl
  10. [亿能测试_www.gdtesting.com]测试技术资料网盘共享