22、Java面向对象——String类

目录

课前先导

一、String类

1、string类

2、字符串的特点

3、String类中的构造方法

4、String类对象的特点

5、字符串的比较

6、获取字符串中的字符

7、获取字符串的长度

二、字符串对象的练习 

1、遍历字符串

2、统计字符串中的字符

3、拼接字符串

4、字符串反转


课前先导

在学习Object类中的方法之前,我们先学习一下String类,前面我们讲字符串类型Sring是一个类,我们今天就详细看一下String类,也了解一下其他定义字符串的方法;掌握关于字符串的操作。

一、String类

1、string类

(1)String类是java.lang包中的一个类,所以使用的时候不用导包;

(2)String类代表字符串,Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。

2、字符串的特点

(1)字符串不可变,它们的值在创建后不能被更改;

(2)虽然String的值是不可变的,但它们可以被共享;

(3)字符串效果上相当于字符数组(char[ ]),但是底层原理是字节数组(byte[ ]

(Ascll码)) 

 字符串的值为什么不可变?

   我们在创建字符串的时候会在内存中创建一个字符串常量池,当使用双引号创建字符串对象时候,系统会检查该字符串是否在字符串常量池中存在,若不存在则创建,存在:不会创建,而是直接复用(共享)。

public static void main(String[] args){String str01 = "abc";String str02 = "abc";boolean result01 = (str01 == str02); // == 比较的是字符串地址值System.out.println("result01 = "+result01+"\n");String str03 = "ab";String str04 = str03 + "c";System.out.println("str04 = "+str04+"\n");boolean result02 = (str01 == str04);System.out.println("result02 = "+result02);}

3、String类中的构造方法

创建字符串的两种方式:

(1)通过构造方法创建对象的方式;

(2)直接赋值的方式(建议使用)。

(1) 创建空白字符串对象

 (2)根据字符数组创建字符串对象

(3) 根据字节数组创建字符串对象

(4) 直接赋值创建字符串对象

4、String类对象的特点

(1)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内存相同,但是地址值不同

(2)以双引号" "方式定义的字符串,只要字符序列相同(顺序和大小写);无论在程序代码中出现几次,JVM都只会建立一个String类对象,并在字符串中维护

String str01 = "abc";String Str02 = "abc";

这里我们定义了两个字符串变量,程序在运行第一行时,JVM会建立一个String类的对象放在字符串池中,并给str01作为参考;程序运行第二行时让str02直接参考字符串池中的String对象,也就是说它们本质上是同一个对象

5、字符串的比较

(1)使用 == 做比较

基本类型:比较的是数据值是否相同;

引用类型:比较的是地址值是否相同

(2) equals()方法

字符串是对象,它比较内容是否相同,要通过String类中的一个方法来实现:equals();

public boolean  equals(Object anObject)  :将此字符串与指定对象进行比较;

由于我们比较的是字符串对象,所以参数直接传递一个字符串。

我们前面讲过字符串的比较:字符串1.equals(字符串2);我们这里依然是这么用,因为每个字符串都是String类的对象吗。所以通过对象调用equals方法,并传递参数 

public static void main(String[] args){//直接复制的方式得到字符串对象String str01 = "abc";String str02 = "abc";//构造方法方式得到字符串对象char[] chs = {'a','b','c'};String str03 = new String(chs);String str04 = new String(chs);//比较字符串地址是否相同System.out.println("str01与str02的地址是否相同?"+(str01 == str02));System.out.println("str01与str02的地址是否相同?"+(str01 == str03));System.out.println("str03与str02的地址是否相同?"+(str03 == str04));//比较字符串中的内容是否相同System.out.println("str01与str02的字符串内容是否相同?"+str01.equals(str02));System.out.println("str01与str02的字符串内容是否相同?"+str01.equals(str03));System.out.println("str01与str02的字符串内容是否相同?"+str03.equals(str04));}

6、获取字符串中的字符

如果想获得字符串中的某个字符,可以通过下标去获得:charAt();

public char charAt(int  index):返回指定索引处的char值,字符串的索引也是从零开始的。

public static void main(String[] args){String str = "abcdefg";char ch = str.charAt(5);System.out.println("你获取的字符是:"+ch);}

7、获取字符串的长度

获取字符串的长度就是获取字符数组的长度,用String类中的方法:length();

public  int  length( );返回此字符串的长度

数组长度:数组名.length( );

字符串长度:字符串对象.length;

public static void main(String[] args){String str = "abcdefg";System.out.println("你获取的字符是:"+str.length());}

二、字符串对象的练习 

1、遍历字符串

从键盘输入一个字符串,使用程序实现在控制台遍历该字符串

public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个字符串:");String str = input.next();for(int i = 0;i<str.length();i++){char ch = str.charAt(i);System.out.println(ch);}

2、统计字符串中的字符

从键盘输入个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数

public static void main(String[] args){Scanner input = new Scanner(System.in);int dChar = 0;//大写字母的个数int xChar = 0;//小写字母的个数int numChar = 0;//数字字符的个数System.out.println("请输入一个字符串:");String str = input.next();for(int i = 0;i<str.length();i++){char ch = str.charAt(i);if(ch >= 'A' && ch <= 'Z'){dChar++;}else if(ch >='a' && ch <= 'z'){xChar++;}else if(ch >= '1' && ch <= '9'){numChar++;}}System.out.println("大写字母"+dChar+"个");System.out.println("小写字母"+xChar+"个");System.out.println("数字"+numChar+"个");}

3、拼接字符串

从键盘输入个字符串,然后按要求输出;比如输入"abcdefg",输出:数组:[a,b,c,d,e,f,g]

public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个字符串:");String str = input.next();String newStr = "数组:[";for(int i = 0;i < str.length();i++){if(i >= 0 && i < str.length()-1){newStr += str.charAt(i) + ",";}else if(i == str.length()-1){newStr += str.charAt(i) + "]";}}System.out.println(newStr);}

4、字符串反转

输入一串字符串,让它在控制台逆序输出

public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个字符串:");String str = input.next();for(int i = str.length()-1;i >= 0;i--){char ch = str.charAt(i);System.out.println(ch);}}

今天的学习内容主要掌握String类方法的使用,关于创建字符串我们还用直接赋值的方法,其他创建字符串的方法混个眼熟就行。好了,今天的学习到此结束,我是一米八、有腹肌、低于半小时你报警的Loveletter,觉得内容不错的小伙伴可以点点关注,我们下篇博文见,再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383236.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java实验四 深入面向对象

实验四 深入面向对象 一、实验目的与要求 1、深刻理解面向对象的三大特征&#xff1b; 2、熟练掌握关键super、final的含义及用法&#xff1b; 3、理解什么是抽象类、抽象方法&#xff0c;以及两者间的关系&#xff1b; 4、深刻理解接口的概念、作用&#xff0c;以及与抽…

java面向对象编程实例讲解_Java面向对象编程实例详解

Java是一种面向对象的语言&#xff0c;是实现面向对象编程的强大工具。但如何在编程中实际运用并发挥其最大效能呢&#xff1f;本文通过一个实际Java程序的开发过程&#xff0c;详细说明了如何使用面向对象实现Java编程。 我们要实现的Java应用程序是&#xff1a;当用户输入一个…

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)

高端百度地图开发系列 高端百度地图开发1&#xff1a;自定义水滴头像&#xff08;自定义标注覆盖物、Overlay覆盖类&#xff09; 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…

2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]

智慧公安基于互联网、物联网、云计算、智能引擎、视频技术、数据挖掘、知识管理为技术支撑&#xff0c;公安信息化为核心&#xff0c;通过互联互通、物联化、智能方式促进公安系统各功能模块的高度集成、协同作战实现警务信息化“强度整合、高度共享、深度应用”警察发展的新概…

写一个简单炫酷的app程序的打开动画

app也是有颜值&#xff0c;动画就是一种化妆术&#xff0c;他让你的app更加炫酷&#xff0c;首先给你看下图 首先呢&#xff0c;先普及下总体的框架知识&#xff0c;有三种动画 (1)Drawable Animation&#xff1a;逐帧动画&#xff0c;就像电影一样&#xff0c;一帧一帧&am…

安卓开机动画的制作

开机动画的存储位置&#xff1a; system/media/bootanimation.zip。 bootanimation.zip的文件结构&#xff1a;包含一个desc.txt和N个文件夹&#xff08;一般两个&#xff09;。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片&#xff08;支持png和jpg格式&am…

安卓基础动画

在开发的过程中&#xff0c;动画可以实现很好的效果&#xff0c;比如对于图片的旋转&#xff0c;电子罗盘的都可以利用动画来时实现。但是对于动画不太熟悉&#xff0c;经常想用却不会用&#xff0c;特地写这篇博客&#xff0c;记录一下对于动画的学习。 主要学习帧动画和Objec…

安卓动画:

Android的三种动画&#xff0c;即&#xff1a; •View Animation&#xff08;视图动画&#xff09; •Drawable Animation&#xff08;帧动画&#xff09; •Property Animation&#xff08;属性动画&#xff09; Drawable Animation&#xff08;帧动画&#xff09;&#xff1…

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接 1260 Completed String 二、题目 题目描述 给一个字符串&#xff0c;请判断字符串是否出现了所有的英文字母&#xff08;不区分大小写&#xff09;。 输入 每行一个只含英文字母的字符串&#xff0c;长度不超过1000。 输出 每行输出一个样例的结果&#xff0c…

openCV配置+cmake操作记录--Ubuntu 16.04版本

项目需要openCV相关操作,于是找了好多教程,琢磨了好久,写个笔记。 更新ubuntu上的一些库: sudo apt-get update sudo apt-get upgrade 安装一些库:(虽然我现在也不明白这玩意,我是纯小白/(ㄒoㄒ)/~~) sudo apt-get install cmake sudo apt-get install build-essen…

笔记2:openCV打开摄像头显示到QT的QLabel--Ubuntu系统

目的: 通过openCV调用摄像头,把捕捉到的画面显示到QT的QLabel控件上。 听起来很easy的样子,我的coding能力很弱,可以找个我是理学院出身的借口,但现实是谁会听你的借口呢,希望这笔记不是给我未来参考的,而是为了博未来的自己一笑,那样才能说明我是进步的哈。 效果:…

【二叉树】1-5,理论基础、前中后序遍历的递归法和迭代法、层序遍历

理论基础、前中后序遍历的递归法和迭代法、层序遍历 1&#xff0c;二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 2&#xff0c;存储方式链式存储线式存储 3&#xff0c;二叉树的遍历深度优先搜索前序遍历&#xff08;递归法、迭代法&#xff09;中序遍历&#xff0…