java获取对象唯一标识(对象的唯一标识属性是什么)

本篇文章给大家谈谈java获取对象唯一标识,以及对象的唯一标识属性是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、JAVA中,String类中的hashCode()方法有什么作用呢?2、java生成唯一标识符有什么用3、java的jvm在执行java程序的时候,会给新建的对象分配一个唯一的标识,请问这个唯一标识怎么获取阿???4、使用java如何获取计算机唯一标识?(注意,操作系统不一定是windows,还要适应其它操作系统)

JAVA中,String类中的hashCode()方法有什么作用呢?

hash从意义上来说应该是实现值的比较。

hashCode值与对象引用没有必然联系。在java中,值相同的两个字符串不一定是同个对象。比如你上面的a和b就是两个不同的对象。

字符串的hash值是根据字符串的值计算的,相同值的字符串对象hash值一定相同,具体的计算方法在jdk的文档中有描述.

每个java对象都有一个唯一的标识,object类中的hash方法就是直接返回对象的这个内部id号,与string的hash方法是不同的,object的hash方法能够用来区分不同的对象.因为原始的object对象没有任何有意义的值可用来计算哈希

java生成唯一标识符有什么用

有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID,然后在数据库事务中同时插入到多章表中实现同步.

在java中有个类工具很好的实现产生唯一ID(UUID),但是由数字和字母及中划线组成的,故数据库字段应该设置为char 并相应的建立索引.

UUID是128位整数(16字节)的全局唯一标识符(Universally Unique Identifier).

指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址,纳秒级时间,芯片ID码和许多可能的数字.由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个 UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长.关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers).

在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx- xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字.而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

,可以从cflib 下载CreateGUID() UDF进行转换.

使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显.

关于UUID的更多信息可以多google 一下.

Java生成UUID

UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址,纳秒级时间,芯片ID码和许多可能的数字.由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长.

在Java中生成UUID主要有以下几种方式:

JDK1.5

如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID:

java.util.UUID, 直接调用即可.

UUID uuid = UUID.randomUUID();

String s = UUID.randomUUID().toString();//用来生成数据库的主键id非常不错..

Java代码

package com.taobao.tddl.client.util;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.net.InetAddress;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

import java.util.concurrent.atomic.AtomicLong;

import java.util.concurrent.locks.ReentrantLock;

/**

* @author huangshang

*

*/

public class UniqId {

private static char[] digits = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’,

‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ };

private static MapCharacter, Integer rDigits = new HashMapCharacter, Integer(

16);

static {

for (int i = 0; i digits.length; ++i) {

rDigits.put(digits[i], i);

}

}

private static UniqId me = new UniqId();

private String hostAddr;

private Random random = new SecureRandom();

private MessageDigest mHasher;

private UniqTimer timer = new UniqTimer();

private ReentrantLock opLock = new ReentrantLock();

private UniqId() {

try {

InetAddress addr = InetAddress.getLocalHost();

hostAddr = addr.getHostAddress();

} catch (IOException e) {

hostAddr = String.valueOf(System.currentTimeMillis());

}

if (hostAddr == null || hostAddr.length() == 0

|| “127.0.0.1”.equals(hostAddr)) {

hostAddr = String.valueOf(System.currentTimeMillis());

}

try {

mHasher = MessageDigest.getInstance(“MD5”);

} catch (NoSuchAlgorithmException nex) {

mHasher = null;

}

}

/**

* 获取UniqID实例

*

* @return UniqId

*/

public static UniqId getInstance() {

return me;

}

/**

* 获得不会重复的毫秒数

*

* @return

*/

public long getUniqTime() {

return timer.getCurrentTime();

}

/**

* 获得UniqId

*

* @return uniqTime-randomNum-hostAddr-threadId

*/

public String getUniqID() {

StringBuffer sb = new StringBuffer();

long t = timer.getCurrentTime();

sb.append(t);

sb.append(“-“);

sb.append(random.nextInt(8999) + 1000);

sb.append(“-“);

sb.append(hostAddr);

sb.append(“-“);

sb.append(Thread.currentThread().hashCode());

return sb.toString();

}

/**

* 获取MD5之后的uniqId string

*

* @return uniqId md5 string

*/

public String getUniqIDHashString() {

return hashString(getUniqID());

}

/**

* 获取MD5之后的uniqId

*

* @return byte[16]

*/

public byte[] getUniqIDHash() {

return hash(getUniqID());

}

/**

* 对字符串进行md5

*

* @param str

* @return md5 byte[16]

*/

public byte[] hash(String str) {

opLock.lock();

try {

byte[] bt = mHasher.digest(str.getBytes(“UTF-8”));

if (null == bt || bt.length != 16) {

throw new IllegalArgumentException(“md5 need”);

}

return bt;

} catch (UnsupportedEncodingException e) {

throw new RuntimeException(“unsupported utf-8 encoding”, e);

} finally {

opLock.unlock();

}

}

/**

* 对二进制数据进行md5

*

* @param str

* @return md5 byte[16]

*/

public byte[] hash(byte[] data) {

opLock.lock();

try {

byte[] bt = mHasher.digest(data);

if (null == bt || bt.length != 16) {

throw new IllegalArgumentException(“md5 need”);

}

return bt;

} finally {

opLock.unlock();

}

}

/**

* 对字符串进行md5 string

*

* @param str

* @return md5 string

*/

public String hashString(String str) {

byte[] bt = hash(str);

return bytes2string(bt);

}

/**

* 对字节流进行md5 string

*

* @param str

* @return md5 string

*/

public String hashBytes(byte[] str) {

byte[] bt = hash(str);

return bytes2string(bt);

}

/**

* 将一个字节数组转化为可见的字符串

*

* @param bt

* @return

*/

public String bytes2string(byte[] bt) {

int l = bt.length;

char[] out = new char[l 1];

for (int i = 0, j = 0; i l; i++) {

out[j++] = digits[(0xF0 bt[i]) 4];

out[j++] = digits[0x0F bt[i]];

}

return new String(out);

}

/**

* 将字符串转换为bytes

*

* @param str

* @return byte[]

*/

public byte[] string2bytes(String str) {

if (null == str) {

throw new NullPointerException(“参数不能为空”);

}

if (str.length() != 32) {

throw new IllegalArgumentException(“字符串长度必须是32”);

}

byte[] data = new byte[16];

char[] chs = str.toCharArray();

for (int i = 0; i 16; ++i) {

int h = rDigits.get(chs[i * 2]).intValue();

int l = rDigits.get(chs[i * 2 + 1]).intValue();

data[i] = (byte) ((h 0x0F) 4 | (l 0x0F));

}

return data;

}

/**

* 实现不重复的时间

*

* @author dogun

*/

private static class UniqTimer {

private AtomicLong lastTime = new AtomicLong(System.currentTimeMillis());

public long getCurrentTime() {

return this.lastTime.incrementAndGet();

}

}

}

java的jvm在执行java程序的时候,会给新建的对象分配一个唯一的标识,请问这个唯一标识怎么获取阿???

可以使用对象的toString()方法,回返回一个字符串,字符串后半部分的哈希码就是唯一的。

toString

public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

返回:

该对象的字符串表示形式。

java获取对象唯一标识(对象的唯一标识属性是什么)

使用java如何获取计算机唯一标识?(注意,操作系统不一定是windows,还要适应其它操作系统)

system.getProperties() 确定当前的系统属性。

看这个方法返回值有没有你想要的。

关于java获取对象唯一标识和对象的唯一标识属性是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月29日 22:41:46
下一篇 2024年3月29日 22:49:06

相关推荐

  • excel选定图片对象,excel对象图标图片

    excel如何全选图片 1、全选图片打开EXCEL表格,在键盘上按下“ALT+A”,全选所有的图片。调大图片点击任意一个图片选择框上四个角落的小圆圈,往外拉动鼠标,所有的图片统一调大。 2、按住 Alt 键,再单击图片。也可以右击图片,然后在图片外空白区单击一下。在选中任一幅图片之后,按下组合键“Ctrl + A”,即可选中所有图片了。“Ctrl + A”,…

    2024年5月23日
    4600
  • java对象比较工具类,java 比较对象

    在java中写一个工具类,该类是将从浏览器传进来的List和数据库中的数据… 1、在同期推出的还有被称为HotJava(热咖啡)的浏览器,Hotjava是一个完全由Java语言编写,基于Java典型应用的web浏览器,并且第一个支持Java Applet。 2、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相…

    2024年5月23日
    3900
  • java对象的产生,java对象生成过程

    java对象是怎么创建出来的 工厂模式 工厂模式抽象了具体对象的过程,用函数来封装以特ing接口创建对象的细节。 javascript面向对象知识很广泛,想深入理解需要花费一些时间对象的创建:1 创建一个面向对象缺点:当我们想创建多个面向对象的时候,重复代码过多,需要封装,所以有了工厂方法。2 工厂方式缺点:无法识别创建的对象的类型。 你好很高兴回答你的问题…

    2024年5月23日
    3900
  • java集合对象排序,java集合对象 排序

    java集合类型有哪些 1、java有三种集合,包括Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set中的对象不按特定方式排序,并且没有重复对象。 2、Java集合主要有四种,分别为:List列表、Queue队列、Set集合、Map映射。List列表:有序的,可重复的;Queue队列:有序…

    2024年5月22日
    4600
  • javaobject对象转数组,java object 转对象

    java如何把Object中的数据转化为String数组 1、数组虽然不能强转,但是数组中每个元素可以强转。 2、session.getAttribute(uauthority).toString() 。标作的方式 ,你可以把任何对象转为String ,就可以看到每个对象都有这个方法。 3、赋值不会报错。args2[i]=args[i].toString()…

    2024年5月22日
    3800
  • java对象字符串,java对象字符串转json

    Java的String类的对象可以是字符串常量,为什么不可以是字符串变量 使用 String 类定义:在 Java 中每个双引号定义的字符串都是一个 String 类的对象。因此,可以通过使用 String 类的构造方法来创建字符串,该类位于 java.lang 包中,作用域是 final。 首先String不属于8种基本数据类型,String是一个对象。因…

    2024年5月22日
    5200
  • javascript对象长度,javascript数组长度

    判断map对象长度 你首先设定一个投影坐标系,然后看图层的属性表,里面有Length一项。 在arcmap窗口的“tools”工具条上面有个小尺子上面带两个相反箭头的图标的工具,就是测量工具。不过你的地图窗口要有单位设置,这个工具才能被激活。 没有长度限制。map可以根据新增的key-value动态的伸缩,因此它不存在固定长度或者最大限制,但是也可以选择标明…

    2024年5月22日
    4300
  • linux硬盘标识,linux硬盘在哪个位置

    linux区分sata和irst 1、IRST驱动是英特尔正式版WHCK快速存储驱动程序。该程序为配备 SATA 磁盘的台式机、移动电脑和服务器平台系统提供更高的性能和可靠性。当使用一个或多个 SATA 磁盘时,可因性能提高及耗电降低而获益。 2、华硕主板M.2接口协议区分。华硕主板M.2接口出都有话框标明,SATA下边为“√”即支持SATA协议,IRST下…

    2024年5月22日
    4300
  • java对象的创建,java对象的创建过程包括

    北大青鸟java培训:创建新对象的两种方式? 1、工厂模式 工厂模式抽象了具体对象的过程,用函数来封装以特ing接口创建对象的细节。 2、java允许将子类对象直接赋给父类引用变量。(向上转型upcasting) 编译时类型转换成运行时类型,需要强制类型转换,要借助于类型转换运算符。 instanceof:前一个操作数通常是一个引用类型变量,后一个通常是一个…

    2024年5月22日
    3900
  • c语言标识错误的是什么意思,c语言标识错误的是什么意思啊

    C语言中常见错误 前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。 忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。 …

    2024年5月22日
    3700

发表回复

登录后才能评论



关注微信