Java之字符串详解

  1. 字符串详解
package com.yuanzijian02;

public class ObjectTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			Object object = new Object();
			Object object2 = new Object();
			System.out.println(object == object2);
            System.out.println("---------------------");
			String str = new String("aaa");
			String str2 = new String("aaa");
			System.out.println(str == str2);
			System.out.println("---------------------");
			String str3 = "bbb";
			String str4 = "bbb";
			System.out.println(str3 == str4);
			System.out.println("---------------------");
			String str5 = "ccc";
			String str6 = new String("ccc");
			System.out.println(str5 == str6);
	}

}

执行结果

false
---------------------
false
---------------------
true
---------------------
false

2.equals()方法,该方法定义在Object类当中,因此在Java中的每个类都具有该方法,对于Object类的equals()来说,它是判断调用eqals()方法的引用于传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==

package com.yuanzijian03;

public class StringTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			String str = new String("aaa");
			String str2 = new String("aaa");
	        System.out.println(str.equals(str2));
	        
	        String str3 = "aaa";
	        String str4 = "aaa";
	        System.out.println(str3.equals(str4));
	        
	        Object object = new Object();
	        Object object2 = new Object();
	        System.out.println(object.equals(object2));
	}

}

执行结果

true
true
false

3.对于String类的equals方法来说,它是判断当前字符串与传进来的字符串的内容是否一致

4.对于String对象相等判断来说,请使用equals()方法,而不要使用==

5.重写equals方法,判断两个字符串是否相等

package com.yuanzijian04;

public class EqualsTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			Student s1 = new Student("zhangsan");
			Student s2 = new Student("zhangsan");
			System.out.println(s1 == s2);
			System.out.println(s1.equals(s2));

	}

}
class Student{
	String name;
	public Student(String name){
		this.name = name;
	}
	public boolean equals(Object anObject){
		if(this == anObject){
			return true;
		}
		if (anObject instanceof Student){
			Student student = (Student)anObject;
			if(student.name.equals(this.name)){
				return true;
			}
		}
		return false;
	}
}

执行结果

false
true

6.String是常量,其对象一旦创建完毕之后,就无法改变,当我们使用加号来拼接字符串之后会生成新的String对象,而不是向原有的String对象追加内容

package com.yuanzijian05;

public class StringTest2 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
			String s1 = "hello";
			String s2 = "world";
			String s3 = s1 + s2;
			System.out.println(s3);
	}

}

执行结果

helloworld

7.String Pool(字符串池),首先检查字符串池有没有当前对象,如果有的话,就不会再向字符串池中添加创建对象,而是直接将字符串对象返回

8.String s = “aaa”;(看1中的程序)

1.查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个对象,然后将String Pool中的这个“aaa”对象的地址返回来付给引用变量s,这样s会指向String Pool中的“aaa”

2.如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回回来,直接赋值

9.String s = new String(“aaa”);(看1中的程序)

  1. 首先在 string Pool中查找有没有“aaa”这个字符串对象,如果有,则不再String Pool中再去创建"aaa"这个对象了,直接在堆中创建一个“aaa”字符串对象,然后将堆中这个“aaa”对象地址返回来,付给s引用,导致s指向了堆中创建的这个“aaa”字符串对象
  2. 2.如果没有,则首先在String Pool中创建一个“aaa”对象,然后在堆中heap创建一个“aaa”对象,然后将堆中这个“aaa”对象的地址返回来,付给s引用,导致s指向了堆中所创建的这个“aaa”对象
时间: 2024-12-21 16:44:51

Java之字符串详解的相关文章

Java String类详解

Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 类概述: Java程序中的所有字面值(string literals),即双引号括起的字符串,如"abc",都是作为String类的实例

java笔记--异常详解与处理

一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才可以是catch字句中的参数类型.     3.有两个直接子类:Error和Exception         Error--指应用程序不应该去处理捕获的一种严重问题,常表示系统级的错误,如内存溢出        Exception--指程序需要捕获,需要处理的异常,是一种设计或实现方面的问题.  

Java注解(Annotation)详解

转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotation的概念 An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotate

java异常处理机制详解

java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我们还可以提供一定的应对预案.C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的.程序员需要查询大量的资料,才可能找到一个模糊的原因.面向对象语言,比如C++, Java, Python往往有更加复杂的异常处理机制.这里讨论Java中的异常处理机制. 异常处理 Ja

java移位运算符详解[转]

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移). 1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按

java 代理模式详解

java 动态代理(JDK和cglib) 设计模式这东东每次看到就明白可过段时间又不能很流利的说出来,今天就用详细的比喻和实例来加深自己的理解(小弟水平不高有不对的地方希望大家能指出来). (1)代理这个词生活中有很多比如在街边卖手机卡.充公交地铁卡的小商店他们都起了代理的作用,java中的代理跟这些小店商的作用是一样的.再比如我想在淘宝上开个服装店但又没有货源怎么办,这时候我就要跟淘宝上某一卖家联系做他的代理.我跟我的商家都要卖衣服(就好比我们都继承了卖衣服的接口sellClothesInte

设计模式 - 迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解

迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包含迭代器接口(iterator interface), import java.util.Iterator; 继承(

java内存泄露详解

很多人有疑问,java有很好的垃圾回收机制,怎么会有内存泄露?其实是有的,那么何为内存泄露?在Java中所谓内存泄露就是指在程序运行的过程中产生了一些对象,当不需要这些对象时,他们却没有被垃圾回收掉,而且程序运行中很难发现这个对象,它始终占据着内存却没有发挥作用. 我举这样一个例子,在现实开发中我们需要自定义一个先进后出的栈集合,代码如下: 这个代码看起来和运行起来都没问题,但是,这里有个很隐晦的问题,就是在pop()方法里面,我们首先找到集合最后一个元素的下标,然后按照下标从集合中取出,但是这

java移位运算符详解

java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和>>>(无符号右移).1.左移运算符左移运算符<<使指定值的所有位都左移规定的次数.1)它的通用格式如下所示:value << numnum 指定要移位值value 移动的位数.左移的规则只记住一点:丢弃最高位,0补最低位如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则按二进制形式把所有的