• 关于Java 里的String和对象


      之前老师在课堂上讲过关于Java的引用,但是很遗憾,木有认真听啊,所以就在学习Java的过程中迷惑迷惑。。。最近好像明白一点Java的引用是怎么回事了。以下仅是我个人的理解,如果不对,还请不吝赐教。

    一、String

      String创建的String对象会放入到一个String池子里,对于一些可以共享的字符串对象,会先在String池子中查找是否存在相同的String内容(字符相同),如果有就直接返回,而不是直接创建一个新的String对象,以减少内存的耗用。

      

    	String s1 = "Hello";
    	String s2 = "Hello";
    	String s3 = new String("Hello");
    	System.out.println(s1==s2);		//true
    	System.out.println(s1==s3);		//false
    

      s1、s2、s3都是变量,他们只是引用了String池子里的对象(除了8中基本数据类型,其他都是引用!),对于s2,因为检测到“Hello”已经在池子中存在,所以直接指向之前创建的“Hello”,而s3是强制在池子中创建了一个新的String对象。。。在Java中,除了8种基本数据类型,使用“==”是用于比较对象在内存中的地址,通过“s1==s2”、“s1==s3”?即可看到s1和s2都指向了同一个String对象,而s3则与s1、s2没有任何关系!

      还有一个应该注意的问题就是:一个字符串对象一旦被配置,他的内容就会固定不变。之前我还在想,既然s1和s2都指向同一个对象,那么改变s1的值,s2的值是否也会跟着改变呢?试一下吧:

        String s1 = "Hello";
        String s2 = "Hello";
        s1="HelloWorld";
        System.out.println(s1);    //Hello
        System.out.println(s2);    //HelloWorld
    

      结果显示改变s1的值s2并没有改变啊,并没有什么卵用,哈哈,转而一想还是那句话的问题啊,”一个字符串对象一旦被配置,他的内容就会固定不变“!!!!!s1指向的”Hello“对象本身并没有发生任何根本性的改变,s1只是引用了另一个新的”HelloWorld“对象,放弃了原来的"Hello"而已!通俗一点,我只是和原来的女朋友(”Hello“)分手了,从新找了一个女朋友(“HelloWorld”),所以呢,"Hello"变成了前女友,从此陌路没有交集,她的其他事情自然管不着了吧,所以呢对s2一点影响都没有!

      然而,对于其他的自定义对象,那就不像String对象那样啦。。

    二、对象

      先上代码:

    public class Person {
    	private String name;
    	private String gender;
    	
    	public Person(){
    		
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	public Person(String name,String gender){
    		this.name = name;
    		this.gender = gender;
    	}
    	@Override
    	public String toString() {
    		return "姓名:"+name+" 性别:"+gender;
    	}
    	public static void main(String[] args){
    		Person p1 = new Person("王凯","男");
    		Person p2 = p1;
    		System.out.println(p1);  // 姓名:王凯 性别:男
    		System.out.println(p2);  // 姓名:王凯 性别:男
    		System.out.println(p1==p2); // true
    		p2.setName("王可爱");
    		System.out.println(p1);  // 姓名:王可爱 性别:男
    		System.out.println(p2);  // 姓名:王可爱 性别:男
    	}
    }
    

     

      p1和p2变量都指向了Person对象,改变p2的属性,从结果可以看到,p1也跟着被改变了耶,所以用户自定义对象与String对象不同,String对象创建后值便不可变,所谓的改变,只是更改了变量的引用,无非是指向了一个新创建的String对象,但是用户自定义对象可以改变,p1与p2在代码中目前为止都是引用同一个对象,改变其中一个,就会对对象有所改变,所以另一个也会跟着改变啦!(理解Java的引用非常重要,慢慢体会吧!)

  • 相关阅读:
    BigDecimal 使用方法详解
    vbs xml 解析
    hybris
    淘宝SKU组合查询算法实现
    GitHub入门教程 Hello World for GitHub
    利用Java进行MySql数据库的导入和导出
    计算机网络自顶向下第三章传输层二TCP
    django网站搭建常用的一些代码
    django中日志使用学习记录
    python遍历当前目录并删除某文件
  • 原文地址:https://www.cnblogs.com/FancyLian/p/5713107.html
Copyright © 2020-2023  润新知