Java 面向对象(三)

🔭学习内容

  • 掌握String类的特点及其主要的操作方法。
  • 对引用传递的概念更加清晰

🔭1、String

String本身是一个类本类,但是此类在使用时却有很多的要求,此类在Java中也算是一个比较特殊的类

(1)实例化String对象

  • ✒️直接赋值

String name=“张三”;

一个字符串已经被一个名称所引用,以后再有相同的字符串声明时,不会再重新开辟空间

  • ✒️调用String类中的构造方法

在String类存在构造方法:public String(String original)

String name=new String(“张三”);

一个字符串就是一个String类的匿名对象,使用new关键字,不管如何都会再开辟一个新的空间

(2)String的内容比较

  • ✒️对于基本数据类型可以通过“==”进行内容的比较

⚜️比较基本数据类型:

int x=2;
int y=2;
System.out.println(x==y); //运行结果为true

⚜️比较字符串的内容:

String s1=“Hello”;
String s2=new String(“Hello”);
String s3=s2;
System.out.println(s1==s2); //结果为false

System.out.println(s1==s3); //结果为false

System.out.println(s2==s3); //结果为true

每个String对象的内容实际上都是保存在堆内存之中的,而且堆中的内容是相等的。但是对s1和s2来说,其内容分别保存在了不同的空间,所以即使内容相等,但是地址的值也是不相等的,==是用来进行数值比较的,所以s1和s2比较不相等。而s2和s3指向了同一个堆内存,所以相等。

  • ✒️使用equals方法对String的内容进行比较

String s1=“Hello”;
String s2=new String(“Hello”);
String s3=s2;
System.out.println(s1.equals(s2)); //结果为true

System.out.println(s1.equals(s3)); //结果为true

System.out.println(s2.equals(s3)); //结果为true

equals()方法的作用是将内容进行比较,所以此处的返回结果都为true

在这里插入图片描述

(3)字符串的内容不可改变

字符串的内容一旦声明则不可改变

⚜️修改字符串内容:

String str=“Hello”;
str=str+“World!”; //此处结果为Hello World!

🧑🏽‍🍳String对象的内容真的改变了吗?下面通过内存分配图来说明字符串内容的修改

(4) String类中常用方法

在这里插入图片描述

⚜️下面介绍几种方法的具体应用

  • ✒️字符串与字符数组的转换

字符串可以使用toCharArray()方法变成一个字符数组,也可以使用String类的构造方法把一个字符数组变为一个字符串。

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str1="Hello";
        char[] c=str1.toCharArray();    //将字符串变为字符数组
        for(int i=0;i<c.length;i++){
            System.out.print(c[i]+"\t");
        }
        System.out.println();
        String str2=new String(c);       //将全部字符数组变为String
        String str3=new String(c,0,3);  //将部分字符数组变为String
        System.out.println(str2);
        System.out.println(str3);
    }
}

⚜️运行结果:

H e l l o
Hello
Hel

  • ✒️从字符串中取出指定位置的字符

可以直接使用string类中的charAt()方法取出字符串指定位置的字符。

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str="Hello";
        System.out.println(str.charAt(3));//取出第四个字符
    }
}

⚜️运行结果:

l

  • ✒️把一个字符串变成一个byte数组,也可以把一个byte数组变成一个字符串

字符串可以通过getBytes()方法将String变为一个byte数组,然后可以通过String的构造方法将一个字节数组重新变为字符串。

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str1="Hello";
        byte[] b=str1.getBytes();
        System.out.println(new String(b));
        System.out.println(new Srting(b,1,3);
    }
}

⚜️运行结果:

Hello
ell

  • ✒️取得一个字符串的长度

在String中使用length()方法取得字符串的长度。

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str="Hello ZhangSan";
        System.out.println(" \"" + str + " \"的长度为:" + str.length());//取出第四个字符
    }
}

⚜️运行结果:

"Hello ZhangSan " 的长度为:14

在数组操作中,使用length取得数组的长度但是操作的最后没有“()”,而字符串调用length是一个方法,只要是方法后面都有“()”。

  • ✒️按照指定的字符串拆分字符串

在String可以通过split()方法拆分字符串,拆分的数据以字符串数组的形式返回。

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str="Hello World!";
        String s[]=str.split(" ");//按空格进行字符串的拆分
        for(int i=0;i<s.length;i++){
            System.out.println(s[i]);
        }
    }
}

⚜️运行结果:

Hello
World!

🔭2、引用传递及基本应用

(1)引用传递

⚜️定义:所谓的引用传递就是指将堆内存空间的使用权交给多个栈内存空间。

  • ✒️引用传递范例一

⚜️代码如下:

class Demo{
    int temp=30;//属性暂不封装
}
public class Test{
    public static void main(String[] args){
        Demo d1=new Demo();
        d1.temp=50;
        System.out.println("调用前;"+d1.temp);
        fun(a1);
        System.out.println("调用后;"+d1.temp);
    }
    public static void fun(Demo d2){
        d2.temp=1000;
    }
}

⚜️运行结果:

调用前;50
调用后;1000

⚜️内存分析图如下:
在这里插入图片描述

  • ✒️引用传递范例二

⚜️代码如下:

public class Demo{
    public static void main(String[] args){
        String str1="Hello";
        System.out.println("调用前;"+str1);
        fun(str1);
        System.out.println("调用后;"+str1);
    }
    public static void fun(String str2){
        str2="MLDN";
    }
}

⚜️运行结果:

调用前;Hello
调用后;Hello

⚜️内存分析图如下:
在这里插入图片描述

(2)接收本类的引用

⚜️也可以在一个类中接收自己本类对象的实例

⚜️代码如下:

class Demo{
    private int temp=30;
    public void fun(Demo d2){
        d2.temp=50;
    }
    public int getTemp(){
        return  temp;
    }
    public void setTemp(int t){
        temp=t;
    }
}
public class Test{
    public static void main(String[] args){
        Demo d1=new Demo();
        d1.setTemp(50);
        d1.fun(d1);
        System.out.println("temp="+d1.getTemp());
    }
}

⚜️运行结果:

temp=50

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亮点菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值