1. 程式人生 > >Object.toString()返回字串的意義:物件名[email protected]+物件記憶體地址?

Object.toString()返回字串的意義:物件名[email protected]+物件記憶體地址?

Java中,如果一個物件未重寫toString()方法,那麼它將會呼叫父類的toString(),如果父類也沒有重寫這個方法,那麼就迭代往上呼叫,直到Object的toString()方法。

ps:八種基本資料型別沒有toString()方法;只能使用相應的包裝類,才能使用toString();toString()是相對於物件而言的,Object類中有這個方法,所以所有物件都有這個方法,程式設計師可以自己重寫這個方法來達到自己想要的輸出;

public clas ToStringTest{
   public static void main(String[] args){
      long a=123;
      Long aa=new Long(a);//使用包裝類
      String ii=aa.toString();//使用aa物件的toString()方法
      System.out.println(ii);//輸出轉換的結果
  }
}

我們在列印這個toStirng()方法的時候,會出現[email protected]字樣,那麼@後面的值到底是什麼呢,它是物件所在的記憶體地址麼?下面我們來證明:

import java.util.ArrayList;
import java.util.List;
 
publicclass ObjectToStringTest {
    private static final intSIZE=10000;
     publicstaticvoid main(String[] args)
    {
        //建立列表存放物件
        List<Object> list = new ArrayList<Object>();
        int existNumber=0;
        //新建SIZE個物件,如果toStirng代表的是記憶體地址,地址是不會重複的,
        //那麼list中應該不會存在重複的元素。
        //list的大小應該為SIZE
        for(int i=0;i<SIZE;i++){
            Object obj = new Object();
            if(list.contains(obj.toString())){
                System.out.println("物件:"+obj.toString()+"已存在!");
                existNumber++;
            }else
                list.add(obj.toString());
        }
        System.out.println("列表List的大小:"+list.size());
        System.out.println("重複元素的個數:"+existNumber);
        System.out.println("===============華麗的分割線===============");
        //清空list
        list.clear();
        existNumber=0;
        //新建一個物件的時候,變數名是對這個物件的應用(相當於物件的"地址")
        //利用這個原理,我們再測試
        for(int i=0;i<SIZE;i++){
            Object obj = new Object();
            if(list.contains(obj)){
                System.out.println("物件:"+obj+"已存在!");
                existNumber++;
            }else
                list.add(obj.toString());
        }
        System.out.println("列表List的大小:"+list.size());
        System.out.println("重複元素的個數:"+existNumber);
    }
}

執行結果如下:

物件:[email protected]已存在!

物件:[email protected]已存在!

列表List的大小:9998

重複元素的個數:2

===============華麗的分割線===============

列表List的大小:10000

重複元素的個數:0

檢視Object原始碼:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
原來返回的是hashCode,而hashCode演算法可能出現hash衝突,所以上面的重複情況了。

PS:如果沒有出現重複情況,可以增大常量SIZE。



相關推薦

Object.toString()返回字串意義物件<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e553e">[email&#160;protected]a>+物件記憶體地址

在Java中,如果一個物件未重寫toString()方法,那麼它將會呼叫父類的toString(),如果父類也沒有重寫這個方法,那麼就迭代往上呼叫,直到Object的toString()方法。 ps:八種基本資料型別沒有toString()方法;只能使用相應的包裝類,才能

shell腳本中的$# $0 <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f8dcb8">[email&#160;protected]a> $* $$ $! $?的意義

腳本 $* width 上一個 pre shell int .cn height 轉載自:http://www.cnblogs.com/davygeek/p/5670212.html 今天學寫腳本遇到一些變量不認識,在此做下記錄。 變量 含義 $0 當前腳本的文件

linux bash Shell特殊變數Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8aaeca">[email&#160;protected]a>, $?

在linux下配置shell引數說明 前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。  例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: [[email protected] /]$ ec

挖坑指南iView Select的<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d798a7a3beb8b997b4bbbeb4bc">[email&#160;protected]a>事件無效

前言 日常挖坑。。 開始 上車。。 實踐 bug描述:Select元件,設定了filterable和remote,前端啟用模糊查詢。期望在使用者選擇某一結果項時,獲取選擇的物件。給Option綁定了點選事件,但是並未生效。 為什麼呢? 應該是元件自身做了事件監聽。 那

【轉載】解決方案<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f48465b6f48465b475a4d014c4042">[email&#160;protected]a>出現Permissi

遇到的問題 今天心血來潮,想將intellij上的專案程式碼放到GitHub上管理。 在進行新增遠端庫的時候,出現了:[email protected]出現Permission denied (publickey) 原因是 ./ssh目錄預設在C:\Users\VULCAN\.ssh,而我

踩坑之路<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b19c9c9cf1e3d4c0c4d4c2c5f3ded5c8">[email&#160;protected]a>傳物件

在postmen上使用@RequestBody傳物件,接受不到引數。 報錯: { “timestamp”: 1542330043448, “status”: 400, “error”: “Bad Request”, “exception”: “org.springframework.ht

修改字串<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="85e4a3e7a3e6c5e4">[email&#160;protected]a>&b&c....中b的值並輸出改變b值後的字串

修改字串a&b&[email protected]&b&c…中b的值並輸出改變b值後的字串 需求:車輛掃描PDA入庫,每次入庫的時候都要修改入庫單的待入庫數量,入庫單中只有一個a&b:&@a&b&

【Shell】linux bash Shell特殊變數Shell $0, $#, $*, <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f6b0f">[email&#160;protected]<

在linux下配置shell引數說明 前面已經講到,變數名只能包含數字、字母和下劃線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。  例如,$ 表示當前Shell程序的ID,即pid,看下面的程式碼: $echo $$ 執行結果 29949

手寫<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="92e0f7f6fbe1d2d1f3f1faf7f3f0fef7">[email&#160;protected]a>註解 引數java物件作為ke

1.實現方式說明 本文在---- 手寫redis @ Cacheable註解支援過期時間設定   的基礎之上進行擴充套件。 1.1問題說明: @ Cacheable(key = “'leader'+#p0 +#p1 +#p2” )一般用法,#p0表示方法的第一個引數,#p1表示

錯誤解決辦法<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="722d283c21133b11373643370432">[email&#160;protected]a>@GLIBCXX_3.4

  使用gcc編譯,產生錯誤如下: /usr/bin/ld: gh_datacenter.o: undefined reference to symbol '[email protected]@GLIBCXX_3.4' //usr/lib/x86_64-linux-gnu/libstd

Spring中Bean的生命週期之<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="476a6a6a6a6a0705222629">[email&#160;protected]a>方法進行物件的初始化

方法:通過@Bean指定init-method和destroy-method; 注:單例項和原型模式物件的建立時間和初始化銷燬的時間順序不同。 一、單例項模式 1、建立Car例項物件,並建立初始化和銷燬方法 package com.atguigu.bean; imp

踩坑之路<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="634e4e4e2331061216061017210c071a">[email&#160;protected]a>傳物件

在postmen上使用@RequestBody傳物件,接受不到引數。 報錯: { “timestamp”: 1542330043448, “status”: 400, “error”: “Bad Req

郵箱<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d3e2ebe0e7e2e0e2e7e1e493a2a2fdb0bcbe">[email&#160;protected]a>

10/16 這個星期日就要體側了,這個1000m感覺比ccpc還要難應付。所以這幾天晚上的健身時間就變成了操場上的跑步時間。為什麼強調操場?因為我在健身房的跑步機上可以1000跑的速度在操場上只能怕跑800。風阻太大了! 10/17 中午吃飯的時候無聊就看了會演

<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99eae9ebf0f7fefbf6f6ede7d9c8ecfcebe0">[email&#160;protected]a>到DTO物件

我們有時在進行開發過程中,使用jpa的@Query註解去選擇多張表然後返回一個DTO物件,這個時候我們需要特殊處理一下,因為預設情況下,你的jpa程式碼是不認DTO物件的。 參考文章:https://smarterco.de/spring-data-jpa-query-result-to-dto/ en

郵箱<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="eedfd6dddadfdddfdadcd9ae9f9fc08d8183">[email&#160;protected]a>

TSP TSP問題非常經典,(旅行商問題)是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路程最短。 如圖,從0開始,把1,2,3都走一遍然後回到0,求最短路徑。 方法有很多 暴力法:城市順序全排列,找到最短距離

郵箱<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2f1e171c1b1e1c1e1b1d186f5e5e014c4042">[email&#160;protected]a>

#include<stdio.h> #include<string.h> #define D long long #define N 109 #define MOD ((int)1e9+7) struct matrix{ int

郵箱<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fccdc4cfc8cdcfcdc8cecbbc8d8dd29f9391">[email&#160;protected]a>

本來寫了很多的,一不小心就刪掉了,哎。懶得重寫了 所有公式要求a與m互質 費馬小定理: :am≡a(mod)ma^m≡a(mod)mam≡a(mod)m , am−1≡1(mod&ThickSpace;m)a^{m-1}≡1(mod \;m)am−1