String类的两种实例化方式

  • 直接赋值:
String str = "www.YOOTK.com";
  • 构造方法:
构造方法:public String(String str),在构造里面依然要接收一个String类对象;
String str = new String("www.YOOTK.com");
字符串的比较

“==”是Java提供的关系运算符,主要的功能是进行数值相等判断的,

如果用在了String对象上表示的是内存地址数值的比较

equals()”:是由String提供的一个方法,此方法专门负责进行字符串内容的比较

内容比较操作(区分大小写):

public boolean equals(String str);
在String对象上使用“==”比较
public class StringDemo {
public static void main(String args[]) {
String stra = "hello"; // 直接赋值定义字符串
String strb = new String("hello"); // 构造方法定义字符串
String strc = strb; // 引用传递
System.out.println(stra == strb); // 比较结果:false
System.out.println(stra == strc); // 比较结果:false
System.out.println(strb == strc); // 比较结果:true
System.out.println(stra);
System.out.println(strb);
}
}
程序执行结果:
false
false
true
hello
hello
“==”比较内存分析

实现字符串内容比较
public class StringDemo {
public static void main(String args[]) {
String stra = "hello"; // 直接赋值定义字符串
String strb = new String("hello");// 构造方法定义字符串
String strc = strb; // 引用传递
System.out.println(stra.equals(strb)) ; // 比较结果:true
System.out.println(stra.equals(strc)) ; // 比较结果:true
System.out.println(strb.equals(strc)) ; // 比较结果:true
}
}
程序执行结果:
true(“stra.equals(strb)”比较结果)
true(“stra.equals(strc)”比较结果)
true(“strb.equals(strc)”比较结果)
字符串常量就是String的匿名对象

任何的编程语言都没有提供字符串数据类型的概念,很多的编程语言里面都是使用了字符数组来描述的字符串的定义。同样在Java里面也没有字符串的概念,但由于所有的项目开发中都不可能离开字符串的应用,那么最终的结果是:Java创造了属于自己的特殊类 —— String(字符串),同时也规定了所有的字符串要求使用“"”声明,但是String依然不属于基本数据类型,所以字符串数据实际上是作为String类的匿名对象的形式存在的。

观察字符串是匿名对象的验证
public class StringDemo {
public static void main(String args[]) {
String str = "hello"; // str是对象名称,而"hello"是内容
System.out.println("hello".equals(str)); // 内容比较,由字符串直接调用
}
}
程序执行结果:
true
String类对象两种实例化方式的区别

直接赋值:String str = "hello" ;

观察直接赋值时的堆内存自动引用
public class StringDemo {
public static void main(String args[]) {
String stra = "hello"; // 直接赋值实例化
String strb = "hello"; // 直接赋值实例化
String strc = "hello"; // 直接赋值实例化
String strd = "yootk" ; // 直接赋值实例化,内容不相同
System.out.println(stra == strb); // 判断结果:true
System.out.println(stra == strc); // 判断结果:true
System.out.println(strb == strc); // 判断结果:true
System.out.println(stra == strd); // 判断结果:false
}
} 程序执行结果: true(“stra == strb”语句输出)
true(“stra == strc”语句输出)
true(“strb == strc”语句输出)
false(“stra == strd”语句输出)
内存分配

分析构造方法实例化String类对象的情况
果要明确的调用String类中的构造方法进行String类对象的实例化操作,那么一定要使用关键字new,而每当使用了使用了关键字new就表示要开辟新的堆内存空间,而这块堆内存空间的内容就是传入到构造方法中的字符串数据。
不自动保存对象池操作
public class StringDemo {
public static void main(String args[]) {
String stra = new String("hello"); // 使用构造方法定义了新的内存空间,不会自动入池
String strb = "hello"; // 直接赋值
System.out.println(stra == strb); // 判断结果:false
}
}
程序执行结果: false
保存到对象池

如果现在希望开辟的新内存数据也可以进行对象池的保存,那么可以采用String类定义的一个手工入池的操作:
保存到对象池:public String intern();
public class StringDemo {
public static void main(String args[]) {
String stra = new String("hello").intern(); // 使用构造方法定义了新的内存空间,手工入池
String strb = "hello"; // 直接赋值
System.out.println(stra == strb); // 判断结果:true
}
}
程序执行结果: true
修改字符串对象引用
public class StringDemo {
public static void main(String args[]) {
String str = "Hello "; // 直接赋值实例化String类对象
str = str + "World ";// 字符串连接,同时修改String类对象的引用关系
str += "!!!"; // 字符串连接,同时修改String类对象的引用关系
System.out.println(str);// 输出当前的String类对象内容
}
}
程序执行结果:
Hello World !!!

Java基础_0307:String类的基本概念的更多相关文章

  1. Java基础笔记-String类

    String 类(被final修饰) 字符串是一种特殊的对象,一旦字符串被初始化就不可以被改变了.(内容不变) 例如: String  s = “abc”; String  s1 = new Stri ...

  2. Java基础之String类

    String类 字符串是不可变的,对其做的任何改变,会生成一个对象,不会改变有原有对象. ==和equals() String s1 = "good"; String s2 = & ...

  3. Java基础教程——String类

    String类 Java程序中的所有字符串字面值(如 "abc" )都是String的实例 字符串是常量(因为 String 对象是不可变的,所以可以共享) 字符串的本质是字符数组 ...

  4. Java 基础之 String 类

    String String 被声明为 final,因此不能被继承.(Integer 等包装类也不能被继承) 在 java8 中,String 内部使用 char 数组 来存储数据 public fin ...

  5. Java基础笔记-String类2

    StringBuffer 特点: 是字符串缓冲区. 是一个容器,其长度可变,可以操作添加多个数据类型. 最后通过toString方法变成字符串. 被final锁修饰,因此不能被继承. 存储: 方法1: ...

  6. Java入门 - 语言基础 - 14.String类

    原文地址:http://www.work100.net/training/java-string.html 更多教程:光束云 - 免费课程 String类 序号 文内章节 视频 1 概述 2 创建字符 ...

  7. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  8. Java基础之String、StringBuffer、StringBuilder浅析

    Java基础之String.StringBuffer.StringBuilder浅析 一.前言: 位于java.lang包下的String.StringBuilder.StringBuffer一般都是 ...

  9. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  10. Java常用API(String类)

    Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...

随机推荐

  1. 【Asia Yokohama Regional Contest 2018】Arithmetic Progressions

    题目大意:给定 N(1<N<=5000) 个不同元素组成的集合,求从中选出若干数字组成的等差数列最长是多少. 题解:直接暴力有 \(O(n^3)\) 的算法,即:枚举等差数列的前两个值,再 ...

  2. 你应该要知道的vue.js

    前言 小组同事最近都在学习前端,目前我们小组前端技术栈主要是vue.在和同事交流过程成,发现他们对vue都不了解,所以整理了问的比较多的问题. 组件data为什么必须是函数? 因为组件可能被多处使用, ...

  3. 第十三节,使用带有全局平均池化层的CNN对CIFAR10数据集分类

    这里使用的数据集仍然是CIFAR-10,由于之前写过一篇使用AlexNet对CIFAR数据集进行分类的文章,已经详细介绍了这个数据集,当时我们是直接把这些图片的数据文件下载下来,然后使用pickle进 ...

  4. TestNg 7.依赖测试

    我本个测试方法执行的时候,依赖于其他的方法.用到关键字dependsOnmethods(依赖于那个方法)也有依赖于哪个组(dependsOnGroups). 看以下的一段代码: package com ...

  5. CSS——nth-child()

    nth-child()选择器:CSS3新属性 用法:p:nth-child(2) 选择p标签的父元素 的第二个子元素,并且这个子元素必须是p才起作用 有点绕,有点无厘头,举个栗子: <!DOCT ...

  6. qml:基本知识记录

    1.  property信号处理函数: 在qml中,通过property可以定义属性,这些属性自带信号处理函数,例如: property   string    szTitle: “hello wor ...

  7. bzoj1027 状压dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1072 题意 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除 试了一下发现暴力可过 ...

  8. maven-compiler-plugin报错

    [INFO] Scanning for projects... [INFO] [INFO] --------------------------< cn.x:credittest >--- ...

  9. 剑指Offer_编程题_16

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. /* struct ListNode { int val; struct ListNode *n ...

  10. 网络编程基础【day09】:通过socket实现简单ssh客户端(三)

    本节内容 1.概述 2.socket发送中文 3.重复发送和多次接收 4.模拟ssh客户端 一.概述 本篇博客讲一下,如果socket客户端断了,另外的客户端怎么接入服务端,还有模拟ssh的链接等. ...