【Java基础学习001】Java String类
大家好我是树树,今天是小树第一次发博客,多多关照呦!
今天给大家讲讲java很常用的中的String类。
前言
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
一、创建字符串
创建方法
1.声明对象String
2.定义它的名字
3.进行赋值操作
参考代码如下:
String str = "little tree"
public static void main(String[] args){
}
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
如图:
二、内部逻辑的理解
内存空间
当我们用String直接赋值或者用new创建对象,都是在一个内存空间中存储该对象名下的值,我在下面举一个例子:
- 先看代码:
public static void main(String[] args) {
System.out.println();
String s1 = "maple";//直接创建
String s2 = "big tree";
String s3 = new String("maple");//对象创建
String s4 = "maple";
String s5 = new String("maple");
System.out.println(s3.equals(s5));
if(s3==s5){
System.out.println("s3与s5相同");
}else{
System.out.println("s3与s5不同");
}
}
结果:true,s3与s5不同
- 那么,由此我们看见了看似自相矛盾的一幕,equals方法判断 s3 与 s5 相同,可是if的布尔逻辑判断 s3 与 s5 不同,明明一样的数据连地址也是一样的,其实理由很简单:
- equals()是判断两个Object包装类的数据是否相等的函数,只是单单的看看两个数据的包装类型一不一样,包装类型一样的两个数据的值一不一样;
- 然而if判断中我用的是(s3==s5),这表示s3和s5完全相同才能算对,也就是说不单单取决于两个数据是否相等,还取决于其他因素,这一点上我做出了许多的实验
- 我首先想到了内存空间,我把内存空间想象成一个多阶而带锁的抽屉柜,锁是打印(也就是输出)某一对象的值时而调用内存空间的调用地址,抽屉就是内存空间,钥匙无限
- 比如我举的 s3 和 s5 的例子,大家可以自己试试,一次只输出一个随机对象的地址,结束,发现地址都是一样的;再一次输出所有对象的地址,结束,之后调换顺序再输出地址,结束,发现地址的顺序都不可被调换;这也说明了抽屉的“锁”都是一样的。
System.out.println(s3.getBytes());
结果[B@119d7047
System.out.println(s4.getBytes());
System.out.println(s5.getBytes());
结果[B@119d7047,[B@776ec8df
System.out.println(s1.getBytes());
System.out.println(s2.getBytes());
System.out.println(s3.getBytes());
System.out.println(s4.getBytes());
System.out.println(s5.getBytes());
结果[B@119d7047,[B@776ec8df,[B@4eec7777,[B@3b07d329,[B@41629346
经过查阅资料,都说变量(栈)使用==比较的是对象的(堆)内存地址,而我觉得也是如此,正如我刚刚实验的,在“两个=”两边的两个数据做比较时可以认为是同时被调用,此时,他们的地址分别是[B@119d7047和[B@776ec8df不同,所以不相等。
-
总的来说只有new方法建立的对象遇到比较会出现问题,而用equals()函数对Object所有包装类均可使用,所以说对象不能用==而只能用equals()。
-
画个图方便理解:
提示:刚开始自学,纯粹个人猜想,有大神能懂我看法或觉得我是错的请直接批评指出就好
- - 开始今日正式学习 - -
1.信息录入与修改基础逻辑
- 登录模拟器
参考代码如下:
public static void main(String[] args) {
String s1 = "maple";
String s2 = "123456";
dengLu denglu = new dengLu();
denglu.loginUser(s1,s2);
}
public int loginUser(String username,String password){
String username_succ = "maple";
String password_succ = "123456";
if(username==username_succ&&password_succ==password_succ){
System.out.println("登陆成功");
return 1;
}else {
System.out.println("登录失败!!!!请检测账号");
return 0;
}
}
结果:登陆成功
- 地址信息修改
参考代码如下:
public static void main(String[] args) {
String s1 = "西安市";
Modify(s1,false);
}
// 更改地址
public static void Modify(String address,boolean flag){
String address_a = "xxxxxx";
if (flag){
System.out.println("我的地址:"+address);
}else{
System.out.println("我的地址:"+address_a);
}
结果:我的地址:西安市
- 检查邮箱是否合法
public static void isMail(String mail)
{
char[] arr = mail.toCharArray();
boolean isCheck=false;
for (char s : arr){
if (s=='@'){
System.out.println("合法");
isCheck = true;
}
}
if (!isCheck){
System.out.println("不合法");
}
}
public static void main(String[] args) {
String mail = "1069bushi861462114514@qq.com";
isMail(mail);
}
结果:合法
2.String中常用函数
- 连接两个字符串,s1.concat(s2)
public static void main(String[] args) {
String s1 = "maple";
String s2 = "123456";
System.out.println(s1.concat(s2));
}
结果:maple123456
- 替换字符串
public static void main(String[] args) {
String a = "mapleXX";
String b = "万岁";
System.out.println(a.replace("XX",b));
}
结果:maple万岁
- 查找字符
public static void main(String[] args) {
String cc = "阿里嘎多美羊羊";
System.out.println(cc.charAt(0));
System.out.println(cc.charAt(4));
}
结果:啊,美
- 比较两个字符串(不考虑大小写)
public static void main(String[] args) {
String s1 = "tree";
String s2 = "TRee";
String s3 = "treE089";
System.out.println(s1.compareToIgnoreCase(s2));
System.out.println(s2.compareToIgnoreCase(s3));
}
结果:0,-3 --- compareTo要考虑大小写,其余用法一样,也可用于Integar包装类---
- 通过比较字符串是否一样返回布尔值(对错)
如字符串与指定 StringBuffer 表示相同的字符序列,则返回 true;否则返回 false。
public static void main(String args[]) {
String s1 = "maple";
String s2 = "treetree";
StringBuffer s3 = new StringBuffer( "treetree");
System.out.println(s1.contentEquals( s3 ));
System.out.println(s2.contentEquals( s3 ));
}
结果:fault,true
- 拆分方法
public static void main(String args[]) {
String str = "IT男,二刺猿,夜耗子,凿壁偷光";
String[] arr = str.split(",");//拆解
for(String s:arr) {
System.out.println(s);
}
结果: IT男
二刺猿
夜耗子
凿壁偷光
- 查找字符
public static void main(String args[]) {
String a = "syfuhkskdmbjfskjhskdnbe";
System.out.println(a.substring(1, 3));//左闭右开[1,3)
}
结果:yf
总结
以上就是今天树树要讲的内容,本文仅仅简单介绍了JavaString类中一些小功能的使用,本猪猪已费心整理,望帮到大家。