Java 面向对象(三)

简介: 🔭学习内容 掌握String类的特点及其主要的操作方法。 对引用传递的概念更加清晰

🔭学习内容


掌握String类的特点及其主要的操作方法。

对引用传递的概念更加清晰


✈️目录

🔭1、String

(1)实例化String对象

(2)String的内容比较

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

(4) String类中常用方法

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

(1)引用传递

(2)接收本类的引用


🔭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

image.png

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

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


⚜️修改字符串内容:

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


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

image.png

(4) String类中常用方法

image.png


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


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

字符串可以使用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


⚜️内存分析图如下:

image.png


✒️引用传递范例二

⚜️代码如下:


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

⚜️内存分析图如下:

image.png


(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
目录
相关文章
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
26 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
4月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
4月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
39 4
|
4月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
3月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
31 0
|
5月前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
5月前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
4月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
82 2