Java程序入门(二)

来源:互联网 发布:梦想世界辅助软件 编辑:程序博客网 时间:2024/05/18 03:13

在上一节中,我们介绍了java的数据类型,其实就有了数据存储的机制,但是程序还需要拥有对数据的计算能力,这一节我们讲下Java的运算符和逻辑控制,再介绍下String的具体使用。

1. 运算符

  • 基础运算符:就是四则运算

  • 三目运算符:理解下面这句话就ok,在开发中常用!

public class TestDemo {    public static void main(String[] args) {        int x = 10;        int y = 12;        int result = x > y ? x : y;        System.out.println(result);    }}
  • 逻辑运算符:<、>、<=、 >=、 ==、&&、||
  • 位运算符:目的是要将十进制转二进制,然后再进行二进制运算,主要有&,|,^,~,<<,>>

2. 逻辑控制

  • if分支: if,else,else if

  • switch:记得每个case后都要加break,才不会一直输出。

public class TestDemo {    public static void main(String[] args) {        int x = 10;        switch (x) {            case 0: {                System.out.println(0);                break;            }            case 10: {                System.out.println(100);                break;            }            default: {                System.out.println(1000);                break;            }        }    }}
  • 循环控制:几种常见循环,for,while,continue的使用

3. String类的使用

3.1 String的实例化

  • 直接赋值: String str = “Hello”

  • 类初始化: String str = new String(“Hello”)

3.2 String的比较

  • ==:这个比较实际是内存地址的比较。并不是堆内存中保存内容的比较,内容的比较用equal()方法。
public class TestDemo {    public static void main(String[] args) {        String a = "Hello";        String b = new String("Hello");        String c = b;        System.out.println(a == b);  //false        System.out.println(b == c);  //true        System.out.println(a == c);  //false    }}
  • equal():比较实际内容是否相同

3.3 String匿名对象

下面代码中,这里的Hello就是一个匿名对象,我们给他起了一个名字,就可以调用。

public class TestDemo {    public static void main(String[] args) {        String str = "Hello";        System.out.println(str.equals("Hello"));  //true        System.out.println("Hello".equals(str));  //true    }}

在实际开发过程中,上述两种比较的方法貌似相同,但是实际推荐第二种写法。为什么呢?
采用第一种写法,当str是一个用户的输入时候,如果str为null,那么这里编译就会报错,因为调用这个方法就报NullPointException。如果采用第二种,就不会报错。因为字符串的匿名对象不可能为null,如果比较的内容为null,就直接返回false。

3.4 String两种实例化方法的分析

  • 1.直接实例化的形式:
String str1="hello";String str2="hello";

首先开辟一块堆内存,用来存放”hello”,然后str放在栈内存中,直接指向这块堆内存。我们看下这两个的内存空间的情况。

这里写图片描述

为什么会这样呢?这里要介绍对象池的概念(Object Pool)
Java中有几个特殊的类,使用了共享设计,String就是其中一个。当使用直接实例化String的方式,字符串的内容会放在对象池中,如果再次调用,则直接去对象池中寻找是否有该内容,如果有,则直接指向原有的堆的地址,即“==”的比较也是相同的。

  • 2.利用类的构造方法定义String
String str=new String("Hello")

继续看下内存关系:如果采用这种方法,将会多产生一块垃圾空间。

这里写图片描述

3.5 字符串的修改

首先,明确一点,字符串定义后就不能修改!
很多人质疑这一点,我们来分析下下面这段代码:

public class TestDemo {    public static void main(String[] args) {        String str = "Hello";        str+=" world!!";        System.out.println(str);  //Hello world!!    }}

我们来分析下上面这段代码在内存空间的情况:

这里写图片描述

我们可以看到,字符串str本身一直都没变,只是对象的引用发生改变,但是这样产生了很多的垃圾空间,所以在实际开发中,要防止多次改变String对象的情况。所以String不适合频繁修改。

总结下,String在开发中使用直接赋值的方法,比较内容时候用equal方法,并且不要经常修改String对象的内容。

原创粉丝点击