【忘不了的Java基础】之String

问题:

  1. String存放在内存的哪个区域中?
  2. String创建几种方式的对比?
  3. String的比较==,和equals()方法,有什么不同?
  4. String为什么要设置成final类型?
  5. String做形参的传递是怎么的?
  6. String,与StringBuffer,StringBuilder?
1.String存放在内存的哪个区域中?
2.String创建几种方式的对比?
    public static void main(String[] args) {
        String s1 = "a";  //第一种
        String s3 = "a";
        String s2 = new String("a");  //第二种
?
        System.out.println("s1==s2  "+(s1==s2));  //false
        System.out.println("s1==s3  "+(s1==s3));  //true
?
        System.out.println("s1.equal(s2)  "+s1.equals(s2)); //true
        System.out.println("s1.equal(s3)  "+s1.equals(s3)); //true
    }

3.String的比较==,和equals()方法,有什么不同?

== 比较的是对象的引用

equals()比较String的内容value

//String源码
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {   //依次比较字符数组的内容
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
4.String为什么要设置成final类型?
public final class String    implements java.io.Serializable, Comparable<String>, CharSequence {
5.String做形参的传递是怎么的?

对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己的。

示例:

public static void main(String[] args) {
?
        String q = "abc";
        System.out.println(q);  //abc
        String qq = upcase(q);
        System.out.println(qq);  //ABC
        System.out.println(q);  //abc
?
    }
?
    public static String upcase(String s){
        return s.toUpperCase();
    }

解读:

当把q传给upcase()方法时,实际传递的时引用的一个拷贝。其实,每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过

6.String,与StringBuffer,StringBuilder?

原文地址:https://www.cnblogs.com/tingtingzhou/p/10909198.html

时间: 2024-11-23 00:29:12

【忘不了的Java基础】之String的相关文章

关于Java基础知识 String StringBuffer StringBuilder三者的区别

Java基础中String StringBuffer StringBuilder 以下介绍 相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder 不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用 StringBuffer:线程安全(

【转载】Java基础之String中equals,声明方式,等大总结

转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识点还是比较多的.今天就和大家来一起讨论一下,关于String的一些容易让人疑惑的地方,废话不多说进入正题...如有谬误请批评指正,如果有疑问请留言.我会在第一时间修改或回答 通过

Java基础笔记-String类

String 类(被final修饰) 字符串是一种特殊的对象,一旦字符串被初始化就不可以被改变了.(内容不变) 例如: String  s = “abc”; String  s1 = new String(“abc”); s在内存中有一个对象, s代表的是一个类类型变量,”abc”是一个对象. s1在内存中有两个对象,分别是new出来的和:  “abc” . s == s1;的结果是false.   因为s和s1它们所对应的地址不同,比较的两个地址,s和s1中存储的地址数值是不同的.因此是fal

06. Java基础之String

      通过学习string源码,可以知道String类其实是通过char数组来保存字符串的.String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法. 一. toString Object中有个方法叫toString,所有的子类都可以重写这个方法.System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法.然后toString的基类实现是:该方法返回的是该J

Java基础之String类的细节问题

本文转载自http://sarin.iteye.com/blog/603684/ 先来看一个例子,代码如下: Java代码   public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str == 

java基础知识---String

一.字符串的不可变性 先看一段代码 1 package reverse; 2 3 public class Reverse { 4 public static void main(String[] args) 5 { 6 String c1=new String("abc"); 7 String c2=new String("abc"); 8 String c3=c1; 9 System.out.println("c1==c2:"+ (c1==c

java基础学习----String

关于String类经常出现的面试题: 问题1: String s1 = “abc”; String s2 = “abc”; System.out.println(s1 == s2); 结果:true 问题2: String s1 = new String(“abc”); String s2 = new String(“abc”); System.out.println(s1 == s2); 结果:false 问题3: String s1 = “abc”; String s2 = “a”; Str

Java基础-关键字-String

1.String的本质 线程安全 打开String的源码,类注释中有这么一段话“Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings.Because String objects are immutable they can be shared.”.这句话总结归纳了String的一个最重要的特点:String是值不可变(

黑马程序员-Java基础之String与StringBuffer

String与StringBuffer < java.lang >-- String字符串 java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢?String s = "abc";只要是双引号引起的数据都是字符串对象. 特点:字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中. ----------------------------------