java 数组赋值赋值问题

Java String直接赋值和new对象的相关问题 - 简书
Java String直接赋值和new对象的相关问题
在Java语言中,String类型变量直接赋值和使用new方式新建String对象是完全不同的两种方式,产生的结果也不一样,需要了解其中的差别。
Java常量池类在加载完成之后,会在内存中存储类中的一些字面量(本身即是值如10,“abc”),对于字符串常量来说,Java会保证常量池中的字面量不会有多个副本,也就是说在常量池中的字符串不可能有两个字符串是相同的,但是Java代码中可能不同的变量的值是相同的,那么在编译期间,这两个变量值所在地址是相同的。而且Java在编译期间会对字符串进行一定的处理,如果一个字符串采用拼接的方式,并且拼接的内容都是字面量的话,那么会自动将字符串先拼接完再赋值,如果常量池中已经有了拼接完成之后的字面量,那么此变量的值的地址就是常量池中的完整字符串的地址。需要注意的是,String在赋值完成之后修改,是会产生新的变量的。比如:String str = "reeves";
str = "abc";
那么实际上在常量池中存储了"reeves"和"abc"两个字面值,在字符串变量赋予新的值的时候并不会改变原先存储的值,它会再新建一个字符串,而在栈中变量存储的值的地址是变了的。
String str1 = "reeves";
String str2 = "reeves";
System.out.println(str1==str2); // 结果:true
例子中新建了两个变量str1和str2,值相同,在编译期间变量str1和str2值得地址都可以确定,因为两个变量的值相同,指向常量池中的地址也相同,因此使用“==”符号来判断两者值得地址是否相同时,返回的是true。
String str1 = "reeves";
String str2 = "ree"+"ves";
System.out.println(str1==str2); // 结果:true
Java语言在编译期间,对于字符串拼接且拼接元素都是字面量的情况,会自动将拼接字符串拼接完整之后再赋值,因此 String str2 = "ree"+"ves"; 就相当于 String str2 = "reeves"; 而“reeves”字面量在常量池中存在,因此str2的引用地址和str1相同。
String str = new String("reeves");
使用new关键字新建String对象时,会在堆中新创建一个字符串对象,值为“reeves”,同时,Java也会监测常量池中是否有“reeves”字面量,如果没有,那么在常量池中再新建一个“reeves”的字面量。
String str1 = "reeves";
String str2 = str1.intern();
System.out.println(str1==str2); //结果:true
String的intern()方法会监测常量池中是否有该字符串的值的字面量,如果有,返回字面量的地址,如果没有,则新建字面量并返回新建字面量的地址。
生性洒脱爱自由,一直努力在思考java 类类之间的赋值 - ITeye问答
A a1 =new A();
A a2 =new A();
a1 a2他们传递是什么?
之后不在使用a2 他会自动消失么?
引用a1 a2他们传递是什么?
之后不在使用a2 他会自动消失么?
JAVA里除了基本类型的变量,其他所有变量都是引用,也就是相当于C C++里的指针,所以赋值只是改变变量引用的指向。
a2=a1也就是a2也指向了a1所指的对象。a2原来指向的对象在下一次垃圾回收的自动收回
hashcode吧。都指向a2了,a1回收吧。
引用a1 a2他们传递是什么?
之后不在使用a2 他会自动消失么?
a1,a2分别指向各自新建的对象A,当执行a1=a2操作后,a1,a2都指向了第二个新建的对象A,这时第一个新建的对象没有引用指向它,会由GC自动回收。
已解决问题
未解决问题下午,在写sql语句时,我用?号赋值,我用了两个?号,但奇怪的是,就是取不到数据,但又不报异常,我把sql打印出来,粘到sql sever 2008后台去执行又可以,当时很无奈啊:& && &String&Log_Num = “GZ0666”; & &String [] paras = {&'&+Log_Num+&'&,&'&+Log_Num+&'&};& && String Check_Type = & dep.id_sl = ? and wor.id_log = ?&;&&& & &String sql = Log_SQL.getInstancex().All_Date(Database_Table, Check_Type,Database_Table_2);Log_SQL类:public String All_Date(String Database_Table_1, String Check_Type,String Database_Table_2){String sql = Common_All_Sql()+& personnel_mi as dep, log_workers as wor where &+Check_T}&&public String Common_All_Sql(){&String sql= &select dep.id_sl 用户账号, dep.groups_sl 组别,dep.name_sl 用户姓名,wor.password_sl 用户密码,dep.post_sl 职位,dep.guest 访客权限, &+ & mon_purview 普通权限,dep.advanced_purview 高级权限,dep.admin_purview 管理员权限 &+ &,dep.gender 性别,dep.entry_date 入职日期,dep.identityx 身份证号,dep.age 年龄 ,dep.xieli 学历,dep.nation 民族 &+ &,dep.&birth_date 联系电话,dep.addressx 住址,dep.marriage 婚姻状况,dep.remark_sl 备注 from &;&}&折腾了一下午,其中用了在右连接也不行,后面在Eclipse断点调试&,也不知道什么原因,在后来,鑫鑫告诉我,这句话有问题,String [] paras = {&'&+Log_Num+&'&,&'&+Log_Num+&'&};,参数两边不要加'号,因为在preparestatement设置参数的时候会自动加上,我修改成String [] paras = {Log_Num,Log_Num};果然可以,在这里万分感谢鑫鑫,当然,还有海峰,牵牛大哥,还有osc-徐航, &&陈鑫,小得意,生活有你们,我的世界很精彩,谢谢你们&。
&select&设置css
最新教程周点击榜
微信扫一扫温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
勤奋的我相信付出就会得到回报
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(6328)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_080075',
blogTitle:'if(a=b) 条件判断中的赋值语句',
blogAbstract:'&&&&&&& 以前,似乎在哪里看到某人说,在书写条件判断语句的时候,把常量放在条件表达式的左边,变量放在右边(如果需要比较的两者都是变量,就算了。)比如判断a是否等于0,则这样写if(0 == a),而不是写成if(a == 0)。这样书写的目的是防止“==”写为“=”,而导致的隐患。\r\n&&&&&&& 错误理解:if(a = 0) 中的 a = 0 因为是赋值语句,所以执行总是放回true。\r\n&&&&&&& 最近使用Java和C++两种语言来做了一次对比。\r\n&&&&&&& 实验一:',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:2,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'勤奋的我相信付出就会得到回报',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Java学习(17)
Java中如果不给普通变量赋值,则使用该变量时编译器会报错。如下:
如果不给数组赋值,则数组所有元素的默认值为0。如下:
public class JavaAssignment {
public static void main(String[]args)//测试
int[] a=new int[5];
double[]b=new double[5];
float[]c=new float[5];
String StrA=new String(&&);
String StrB=new String(&&);
String StrC=new String(&&);
for(int i=0;i&5;i++)
StrA+=String.valueOf(a[i])+& &;
StrB+=String.valueOf(b[i])+& &;
StrC+=String.valueOf(c[i])+& &;
System.out.println(&int:&+StrA);
System.out.println(&double:&+StrB);
System.out.println(&float:&+StrC);
}运行结果如下:
推荐文章:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:256090次
积分:3685
积分:3685
排名:第8207名
原创:98篇
转载:45篇
评论:72条
文章:26篇
阅读:77397
文章:14篇
阅读:10629
文章:17篇
阅读:18411
阅读:5346
文章:24篇
阅读:85418
文章:19篇
阅读:16379
(2)(1)(1)(1)(1)(1)(1)(5)(22)(20)(35)(41)(4)(10)(4)(2)

我要回帖

更多关于 java list赋值 的文章

 

随机推荐