java两个语句的区别

作者&投稿:旗英 (若有异议请与网页底部的电邮联系)
java 判断语句中 一个等于号和两个等于号的区别是什么?~

一个等号是赋值号,两个等号是判断号。赋值表示把右边的值或引用赋给左边的变量,判断号表示返回符号两边的值是否相等,这里的值包括引用。

一个等于号相当于赋值
比如 int i = 5;
就是把i的值赋为5
两个等于号是相等的意思
比如 1==1 返回的就是true
1==2 返回的就是false

解析Java中的String对象的数据类型

1. 首先String不属于8种基本数据类型,String是一个对象。

因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。

2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;

3. String str=”kvill”;

String str=new String (“kvill”);的区别:

在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。

常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。

看例1:

String s0=”kvill”;

String s1=”kvill”;

String s2=”kv” + “ill”;

System.out.println( s0==s1 );

System.out.println( s0==s2 );

结果为:

true

true

首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。

因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。

所以我们得出s0==s1==s2;

用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

看例2:

String s0=”kvill”;

String s1=new String(”kvill”);

String s2=”kv” + new String(“ill”);

System.out.println( s0==s1 );

System.out.println( s0==s2 );

System.out.println( s1==s2 );

结果为:

false

false

false

例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。

4. String.intern():

再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了

例3:

String s0= “kvill”;

String s1=new String(”kvill”);

String s2=new String(“kvill”);

System.out.println( s0==s1 );

System.out.println( “**********” );

s1.intern();

s2=s2.intern(); //把常量池中“kvill”的引用赋给s2

System.out.println( s0==s1);

System.out.println( s0==s1.intern() );

System.out.println( s0==s2 );

结果为:

false

**********

false //虽然执行了s1.intern(),但它的返回值没有赋给s1

true //说明s1.intern()返回的是常量池中”kvill”的引用

true

最后我再破除一个错误的理解:

有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的 Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的:

看例4:

String s1=new String("kvill");

String s2=s1.intern();

System.out.println( s1==s1.intern() );

System.out.println( s1+" "+s2 );

System.out.println( s2==s1.intern() );

结果:

false

kvill kvill

true

在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的,当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。

s1==s1.intern()为false说明原来的“kvill”仍然存在;

s2现在为常量池中“kvill”的地址,所以有s2==s1.intern()为true。

5. 关于equals()和==:

这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。

6. 关于String是不可变的

这一说又要说很多,大家只要知道String的实例一旦生成就不会再改变了,比如说:String str=”kv”+”ill”+” “+”ans”;

就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”kvill”又和” “ 生成 ”kvill “存在内存中,最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的。

依我看,写法不同,功能一样的。没区别

//这个只是把String[]args 数组的变量名声明为args
public static void main(String[] args){

//这个只是把String[]arg 数组的变量名声明为arg
public static void main(String arg[]){

args 变量名随自己取的,但要在变量名声明归则原则下,比如可以用_ $ 英文字母等开头,不能以数字开头!
希望能让你明白!

你用String strName1="Humpty dumpty"和String strName=new String("Humpty dumpty")这个比较下
如strName1==strName是否为真,strName1.equals(strName1)是否为真,最重要的是会不会用,区别就在一个用==为假,用equals为真!多上机试试就知道了

不知你了解jvm不?里面有个常量池和堆,前一条直接把引用变量指向常量池,后一条则是把引用变量指向在堆中开的一个新区域


在JSP中如何实现分页技术啊?
大多分页显示的查询操作都同时需要处理复杂的多重查询条件,sql语句需要动态拼接组成,再加上分页需要的记录定位、总记录条数查询以及查询结果的遍历、封装和显示,程序会变得很复杂并且难以理解。因此需要一些工具类简化分页代码,使程序员专注于业务逻辑部分。下面是我设计的两个工具类: PagedStatement 封装了数据库连接、...

...must be set when no Connection avalable
必须设置数据库驱动类型,告诉hibernate是要用哪个数据库,因为每个数据库的sql语法规则不一样,只有正确指定数据库类型配置,hibernate才能正常的转换相应的sql语句,正常执行到数据库;--- 你看看数据库是不是正常启动着呢,有可能是数据库关闭了

电脑开机显示DLLC:\\Windows\\System32\\2052\\msiava.dll无此镜像驱动程 ...
如果错误仍然存在,可使用“记事本”打开系统文件夹下(如〈C:\\Windows\\〉)的system.ini文件,然后在[386Enh]节上加入如下两行语句:; Increases default stack pages from 2 to 6 MinSPs=6 (MinSPs默认值是2,如需要,每次增加2直到解决问题为止,而第一句前面的“;”主要起注释作用。)修改好...

我觉得java最大的优点是不是java很稳定,不会出现大的更新?
稳定不稳定不是看是否有大的更新,java的如果要说,最大的优点就是用的人最多,这个下面具体说 为什么你感觉Java更新有很少的变化呢?因为java的更新,有一个原则就是向下兼容,也就是你在jdk1.4上写的代码,跑在jdk1.7上一点问题没有。java入门其实不难,你如果会.net,一两天就可以学会基本使用...

java是什么语言?
Java是一种高级的面向对象,基于类,并发,安全和通用的计算机编程语言,它是一种广泛使用的强大技术。java是什么语言?Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言...

什么是UO? 怎样使用 按装?
1:只有MUD游戏才算得上是真正的虚拟现实游戏,玩者并不是一个英雄,而只是一个普通人。一切都需要你确实的去做,去学,去想,去问,如同真实人生一样的开始你的是生活。2:游戏要人多而且同时玩才好玩,在你进入的MUD世界中有无数位和你一样的玩家,你与他们一起为这个世界创造着一个又一个的...

汇编语言是什么语言?
符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,...由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到

大家认为相亲的时候是独生子女占优势还是非独占优势
不仅如此,女生贵在能够沉下心来,具有语言天赋,记忆能力,表达能力,思辨能力和逻辑能力以及细腻的心思和执着的毅力,女生的细心与认真也是全国认证的,懂得去抓老师语句中的重点,听老师的话也是举国闻名的,这更是我们女生的优势。AVA和梭型军刀玩大铲子比较占优势还是野战锹比较占优势 当然是人民大...

...与狼搏斗?屠夫的机智表现在哪些地方?从文中找句子
苦等16分钟: 最后两个月高考数学120分以上考生如何快速 回答 苦等16分钟: 有谁在一直跟着我吗绝对真实经历 回答 苦等17分钟: 最强nba斯托克顿怎么打 回答 苦等25分钟: 哪些技能最好保留继承 回答 苦等25分钟: 我早晨跑步已坚持两年现右脚底疼痛木涨与跑步有关系吗 回答 更多等待求助问题 > 登录...

Java大学基础教程的图书目录
Visual Basic,Visual C++,C#和.NET1.13典型的.1ava开发环境1.14关于Java和本书的说明1.15 Java应用程序的运行示例1.16对象技术与UML简介1.17本章小结1.1 8 Web资源第2章 .Java应用程序入门2.1简介2.2第一个Java应用程序:打印一行文字2.3修改第一个Java程序2.4用pfinff显示文本2.5另一...

顺城区17726964400: 请教下 帮我解释下这两个java语句的差别 -
系关复方: index = s.indexOf ("thanks");while (index!=-1) { ....} 这个index被赋值一次就不变了,因为s串不变了,所以while循环的时候 里面的 s =s.substring(index+sfind.length());中的index值就不对了 while( (index = s.indexOf ("thanks") ) != -1){ ......} 这个index会随s.indexOf("thanks")而变,所以s串s =s.substring(index+sfind.length())中index才是正确的值

顺城区17726964400: 这两个JAVA语句有什么区别?
系关复方: 生成对象所调用的构造函数不同

顺城区17726964400: JAVA这两个赋值语句有什么不同啊? -
系关复方: String st1="abc"; 只有一个String对象被生成; String st1=new String("abc");会先生成一个值为"abc"的对象,再copy进st1..做个试验就清楚这种区别了 String st1 = "abc"; String st2 = "abc"; System.out.println(st1==st2); //结果是...

顺城区17726964400: 在JAVA中的if 语句与swith语句的区别是什么? -
系关复方: 都是一样的.if全都能实现,而且也不会麻烦.一点区别就是if()else if()……只能执行一个if里面的代码,但是switch不同,只要case中代码运行完,不遇到break;就继续按顺序执行下一个case中的代码.

顺城区17726964400: java中的foreach语句和for语句的区别及各在什么情况下使用 -
系关复方: List<Users> list=new Llist<User>(); foreach(Users u:list){System.out.println(u.属性); } for(int i=0;i<list.size();i++){Users u=list.get(i); } 所有的for循环都可以改成foreach循环 foreach循环不能判断“<>”(不等于) 工作中有时必须使用for

顺城区17726964400: Java中if和while有什么区别? -
系关复方: if(条件成立){如果条件成立的话就执行这里面的,只执行一次. } while(条件成立){只要条件成立,就一直循环执行这里面的代码,一直到条件不成立.或者不想循环的话就break;跳出循环. }

顺城区17726964400: Java中if和while有什么区别? -
系关复方: if呢就是一个判断的,如果满足后面的条件就继续运行if语句里面的东西的,要是不满足就跳出来,执行else语句或执行下面的语句的 .while呢就是循环语句的,当满载while里面的条件时,就会...

顺城区17726964400: Java语句中的两种输出语句println和printf有什么区别 -
系关复方: print\println\printf的区别 print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后.println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始.printf是格式化输出的形式.下在举个例子...

顺城区17726964400: JAVA语句问题? 这两个语句不同的地方 ,求大神能解释一下两种不同写法有什么区别和作用?
系关复方: 第一种是多态的写法,即一个父类引用可以指向其子类对象(你这里应该是one继承了two,two继承了three,所以他们都间接或直接继承了one). 第二种则就是普通的创建对象调用方法了,如果让程序容易扩展和维护的话建议第一种.

顺城区17726964400: java关闭程序的问题,两个语句的区别 -
系关复方: 两者效果上是一致的,都是退出程序.但是本质上来说:前者是在生成窗体的时候设置的属性,后者是监听.执行过程也是,当点击关闭按钮时后者先调用,前者设置的属性才起作用.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网