首页 > 编程语言 >Java拾贝第四天——String和匿名对象

Java拾贝第四天——String和匿名对象

时间:2023-10-17 12:22:43浏览次数:34  
标签:Java String void 数据类型 hello main public 拾贝

Java拾贝不建议作为0基础学习,都是本人想到什么写什么

复习突然发现String没写
匿名对象
只在堆内存中开辟空间,栈内存中没有对其进行引用的一种对象。(会等待被GC清除)

public class Test4 {
    public static void main(String[] args) {
        new Noname("匿名对象");
    }
}
class Noname{
    String name;

    public Noname(String name) {
        this.name = name;
    }
    public void nameTellYou(){};
}
//方法名采用驼峰命名法,即第一个单词的首字母小写后续的单词首字母大写

String

String作为Java一个特殊的类。有两种实例化方式。(String不是基本数据类型)

    public static void main(String[] args) {
       String str="String不是基本数据类型";
       String s=new String("String不是基本数据类型");
    }

试试比较他们

    public static void main(String[] args) {
        String str = "String不是基本数据类型";
        String s = new String("String不是基本数据类型");
        System.out.println(str == s);
    }
//false

为什么会这样?他们内容不是一样吗?

实际上对于String来使用关系运算符==进行比较的是地址值。(堆内存中的地址值)。

面向对象那里提到过,new关键字其实就是在堆内存中开辟一个新的空间。所以这里的结果是false。

若想要比较String的内容,可以使用String类提供的方法。
public boolean equals(String str)
公开的 返回值是布尔类型 方法名为equals 传参为String

    public static void main(String[] args) {
        String str = "String不是基本数据类型";
        String s = new String("String不是基本数据类型");
        System.out.println(str.equals(s));
    }
//true

String的内容不可变

一个字符串就是一个String的匿名对象(匿名对象仅在堆内存中开辟空间)。

    public static void main(String[] args) {
        System.out.println( "hello".equals("hello") );
    }
//true

基于上述的内容可以发现:

//一个字符串就是一个String的匿名对象
String s="hello";

实际上就是把一个在堆内存中开辟好空间的匿名对象赋值给变量s。

这么做的好处是,如果一个字符串已经被开辟,那么后续再有相同的变量声明它时,就不会再开辟新的内存空间。

    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "hello";
        String s3 = "hello";
        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
    }
/*
true
true
*/

上述栗子说明这3个变量其指向的堆内存空间地址值都是同一个,所以结果是true。

    public static void main(String[] args) {
        String s1 = "hello";
        s1 = s1 + " world!";
        System.out.println(s1);
    }
//这里只是改变变量s1其指向的堆内存空间,原来"hello"后续不再使用会等待GC清除。

这就是String的内容不可变

标签:Java,String,void,数据类型,hello,main,public,拾贝
From: https://www.cnblogs.com/Ocraft/p/17769394.html

相关文章

  • 【Java 并发编程】synchronized
    synchronized关键字synchronized是Java中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。使用方法修饰实例方法给当前对象实例加锁,进入同步代码前要获得当前对象实例的锁......
  • 【Java 并发编程】ReentrantLock
    目录ReentrantLock公平锁和非公平锁synchronized和ReentrantLock有什么区别?ReentrantLockReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等......
  • 【Java 并发编程】ThreadLocal
    目录ThreadLocalThreadLocal实现线程隔离的原理ThreadLocal内存泄漏场景ThreadLocalThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类;当使用ThreadLocal来维护变量时,ThreadLocal会为每个线程创建单独的变量副本,避免因多线程操作共享变量而导致的数据不......
  • java serverlets使用数据源连接oracle数据库,并执行查询操作代码
    packagechap03;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.PreparedStatement;importjava.sql.Statement;importjava.u......
  • 【Java 并发编程】LockSupport
    目录简介方法介绍阻塞和唤醒示例示例1示例2示例3阻塞对象blocker的作用和显式锁、隐式锁等待唤醒的区别简介java.util.concurrent.locks.LockSupport是一个工具类,提供了基本的线程阻塞和唤醒功能,它是创建锁和其他同步组件的基础工具,内部是基于sun.misc.Unsafe类实现的。Lo......
  • Javascript报错:Uncaught TypeError: $(...).slide is not a function
    检查网站的时候,发现网页出现一个报错,UncaughtTypeError:$(...).slideisnotafunction同时,平时没有问题的轮播图,也不轮播了。检查并解决步骤如下: 1.顺着错误提示点过去,发现就是slide函数无法运行。查看相关介绍,表示是jq文件进行了重复引用,且版本不同 如下图相关资料描......
  • Java IO 与 NIO:高效的输入输出操作探究
    引言输入输出(IO)是任何编程语言中的核心概念,而在Java中,IO操作更是应用程序成功运行的基石。随着计算机系统变得越来越复杂,对IO的要求也日益增加。在本文中,我们将探讨JavaIO和非阻塞IO(NIO)的重要性以及如何在Java中实现高效的输入输出操作。传统IO(阻塞IO)传统IO是大多数开发人员熟......
  • 这篇记录一下C#和java中的http request的测试
    1.在c#中,测试http的,一般做一个mock的httpContext,然后里面的request和response都使用mock的,这样设置好后,就可以测试controller2.在java中,因为是httpservelet这些,所以实例化测试创建mock的httprequest这些https://www.baeldung.com/java-httpservletrequest-mock@Testvoid......
  • java学习第一天-安装JDK,运行Hello.java
    卸载JDK删除java的安装目录删除JAVA_HOME删除path下关于java的目录cmd下输入java-version安装JDK华为云JDK下载链接,首先下载JDK下载对应版本安装JDK设置安装路径配置环境变量打开环境变量新建系统变量-->JAVA_HOME配置path变量,新建%JAVA_......
  • Java内部类进行回调的场合和范例
    大力:“内部类回调外部类的实现,是咋回事?”卫琴:“回调实质上是指一个外部类尽管实际上实现了某种功能,但是没有直接提供相应的接口,客户类可以通过这个外部类的内部类的接口来获得这种功能。而这个内部类本身并没有提供真正的实现,仅仅调用外部类的实现。可见,回调充分发挥了内部类具有访......