㈠ 为什么 java 中的 string 是不可变的
个人理解:因为string在java的编程当中比较普遍,以下的回答比较全面一些:
Java中String为什么是不可变的
1、在Java中,String类是不可变类,一个不可变类是一个简单的类,并且这个的实例也不能被修改,
这个类的实例创建的时候初始化所有的信息,并且这些信息不能够被修改
2、字符串常量池
字符串常量池是方法区中一块特殊的存储区域,当创建一个字符串常量的时候,判断该字符串字在符串字符串常量池中是否已经存在
如果存在,返回已经存在的字符串的引用;如果不存在,则创建一个新的字符串常量,并返回其引用
String string1 = "abcd";
String string2 = "abcd";
变量string1,string2指向常量池中的同一个字符串常量对象;如果String是可变的,给一个变量重新赋值一个引用,将会指向错误的值
3、缓存哈希值
在Java中字符串的哈希值会经常被使用到。例如在HashMap中,String的不可变总能保证哈希值总是相等的,并且缓存起来,不用担心会改变,
那意味着不需要每次都计算哈希值,这样会提高效率。在String类中有以下的代码:
private int hash; //用来缓存哈希值
3、促进其他对象的使用
HahSet<String> set = new HashSet<String>();
set.add(new String("a"));
set.add(new String("b"));
set.add(new String("c"));
㈡ Java中比较字符串的内容是否相等内部是如何比较的还有比较字符串与比较它的哈希值哪个快
java中判断字符串是否相等有两种方法:1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",那么a==b将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;再比如:String a=new String("abc"); String b=new String("abc");那么a==b将返回false,因为a和b指向不同的对象。2、用equals方法,该方法比较的是字符串的内容是否相同,比如:String a=new String("abc"); String b=new String("abc"); a.equals(b);将返回true。所以通常情况下,为了避免出现上述问题,判断字符串是否相等使用equals方法。
㈢ java中字符串可以用s[i]
可以。s[i]是字符串的第i个字符,n是字符串的长度,^表示求幂。空字符串的哈希值为0。变量i用来存放字符串数组下标,则应填入s[i]
㈣ java中将字符串传入到HashMap中
packagetest;
importjava.util.HashMap;
importjava.util.Map;
publicclasstest{
publicstaticvoidmain(String[]args){
Stringa[]=newString[]{"1001_张三","1002_李四","1003_王五","1004_赵六"};
Map<String,String>map=newHashMap<>();
for(inti=0;i<4;i++){
Stringnum=a[i].substring(0,a[i].indexOf("_"));
Stringname=a[i].substring(a[i].indexOf("_"+1));
map.put(num,name);
}
}
}
㈤ JAVA中,String类中的hashCode()方法有什么作用呢
hash从意义上来说应该是实现值的比较。
hashCode值与
对象引用
没有必然联系。在java中,值相同的两个字符串不一定是同个对象。比如你上面的a和b就是两个不同的对象。
字符串的hash值是根据字符串的值计算的,相同值的字符串对象hash值一定相同,具体的计算方法在jdk的文档中有描述.
每个java对象都有一个唯一的标识,object类中的hash方法就是直接返回对象的这个内部id号,与string的hash方法是不同的,object的hash方法能够用来区分不同的对象.因为原始的object对象没有任何有意义的值可用来计算哈希
㈥ java怎么通过hash算法比对对象是否修改
java使用哈希值判断通过hash算法比对对象是否修改。根据查询相关公开信息显示,使用string.GetHashCode()方法,将用户对象序列化成字符串,用string.GetHashCode()方法,获取字符串的哈希值,当用户点击保存按钮保存数据时即可判断对象是否修改。
㈦ java中什么是哈希码值
哈希码是一种数据结构的算法。常见的哈希码的算法有:
1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new
Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。
㈧ JAVA中哈希码具体是什么
哈希其实只是一个概念,没有什么真实的指向。它的目的是保证数据均匀的分布到一定的范围内。所以不同数据产生相同的哈希码是完全可以的。
java中哈希一般是希望自己写算法的。随便返回什么都可以。如果什么也不写的话就会返回地址。如果自己写,最简单的做法是把所有字段拼起一个长串做个hash值。
㈨ java哈希值
两个内容相同的对象具有相同的hashcode;反之不成立。
HashMap对象是根据其Key的hashCode来获取对应的Value。
map的实现是数组结合链表。hashcode决定存放位置,两个对象位置一样时比较equals方法。true的话覆盖(同一个对象),false的添加(不是同一个对象)。
㈩ java使用HashMap实现,键保存字符串,值保存保存出现的次数
恩,给你实现,代码说话,直接粘贴在ide中就可以运行:
importjava.util.HashMap;
publicclassSaveDatas{
publicstaticvoidmain(String[]args){
String[]names={"chenchao","zhangsan","zhangsan","chenhao","lisi","wangwu","zhaoliu","xiaopqiang","haha","chenchao"};
saveinHashMap(names);
}
publicstaticvoidsaveinHashMap(String[]strs){
HashMap<String,Integer>datas=newHashMap<String,Integer>();
for(inti=0;i<strs.length;i++){
Stringkey=strs[i];
Integervalue=datas.get(key);
if(value==null){
datas.put(key,1);
}else{
datas.put(key,value+1);
}
}
printHashMap(datas);
}
publicstaticvoidprintHashMap(HashMap<String,Integer>hashMap){
for(Stringkey:hashMap.keySet()){
System.out.println("字符串:"+key+"出现的字数为:"+hashMap.get(key));
}
}
}
//运行结果:
字符串:zhaoliu出现的字数为:1
字符串:wangwu出现的字数为:1
字符串:xiaopqiang出现的字数为:1
字符串:lisi出现的字数为:1
字符串:haha出现的字数为:1
字符串:zhangsan出现的字数为:2
字符串:chenhao出现的字数为:1
字符串:chenchao出现的字数为:2