Java程序入门(二)

在上一节中,我们介绍了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对象的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值